《剑指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

得解!

posted @ 2020-08-08 10:39  Geeksongs  阅读(361)  评论(0编辑  收藏  举报

Coded by Geeksongs on Linux

All rights reserved, no one is allowed to pirate or use the document for other purposes.