剑指offer - 变态跳台阶 - python

65 阅读1分钟

题目描述:

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

思路:

每个台阶可以看作一块木板,让青蛙跳上去,n个台阶就有n块木板,最后一块木板是青蛙到达的位子, 必须存在,其他 ( n − 1 ) (n-1) (n−1)块木板可以任意选择是否存在,则每个木板有存在和不存在两种选择, ( n − 1 ) (n-1) (n−1)块木板 就有 [ 2 n − 1 ] [2^{n-1}] [2n−1]种跳法,可以直接得到结果。

其实我们所要求的序列为: 0 , 1 , 2 , 4 , 8 , 16 , … … 0,1,2,4,8,16,…… 0,1,2,4,8,16,……所以除了第一位外,其他位的数都是前一位的数去乘以2所得到的积。


AC代码

# -*- coding:utf-8 -*-
class Solution:
    def jumpFloorII(self, number):
        # write code here
        num = [1,1]
        while len(num) <= number:
            num.append(2*num[-1])
        return num[-1]