《剑指offer》3:变态青蛙跳台阶
一.题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
二.题目解析
假设我们从最后往前面跳,令最后一次跳的次数为f(n),那么f(n)=f(n-1)+f(n-2)+....+f(1),因为每往回跳一次,则可以往回跳1,2,3,4,.....n级,而随便在x级别台阶处往回跳,都具有f(x)种跳法。假设在第n-3级台阶,那么往回则有f(n-3)种跳法。因此f(n)=f(n-1)+f(n-2)+....+f(1)
我们考虑只往回跳了一级台阶的情况,那么这个时候往回跳的跳法一共有f(n-1)种,展开有f(n-1)=f(n-2)+f(n-3)+.....f(2)+f(1),正好可以替换掉f(n)的展开式,从f(n-2)开始向后的部分,因此可以得到f(n)=2f(n-1)的表达式,这个表达式则可以用于我们递归求解,但是由于时间复杂度的缘故,我们使用迭代方法求解,解答的代码如下:
class Solution: def jumpFloorII(self, number): # write code here if number==1: return 1 else: ret=0 a=1 for i in range(2,number+1): ret=2*a a=ret return ret
得解!