剑指offer JZ9:变态跳台阶
问题
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
思路
这是经典的跳台阶的衍生问题,一个青蛙可以先跳x个台阶,接下来的问题等同调(n-x)台阶的问题,故而最终的结果是之前所有结果的和
值得注意的是,dp[0] = 1表示的是青蛙第一次啥也不跳,第二次直接跳完所有的台阶(也就是一次跳完台阶)的情况。
代码及解释
class Solution:
def jumpFloorII(self, number):
# write code here
n = number
if n == 0:
return 0
if n == 1:
return 1
dp = [0]*(n+1)
dp[0] = 1
dp[1] = 1
for i in range(2, n+1):
for j in range(i):
dp[i] += dp[j]
return dp[n]