剑指offer 变态跳台阶

题目描述

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

方法

思路:
在跳第1次时,有n种跳法,分别为1,2,….,n
第一次跳1级,剩余n-1级,f(n-1)
第一次跳2级,剩余n-2级, f(n-2)
……
第一次跳n-1级,剩余1级,f(1)
可得到结论
f(n) = f(n - 1) + f(n - 2) + … + f(1)
f(n-1) = f(n - 2) + f(n - 1)+ … + f(1)
可以得出:
f(n) = 2 * f(n - 1)

方法1:动态规划 & 自顶向下

1
2
3
4
5
6
7
8
9
10
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number==0:
return 0
if number==1:
return 1
if number>=2:
return 2*self.jumpFloorII(number-1)

方法2:动态规划 & 自底向上

1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number==0:
return 0
if number==1:
return 1
dp=[0]*number
dp[0]=1
for i in range(1,number):
dp[i]=2*dp[i-1]
return dp[-1]

参考资料