zoukankan      html  css  js  c++  java
  • 《剑指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

    得解!

  • 相关阅读:
    junit4的初级用法
    junit3和junit4的区别总结
    工作一年多了,我的技术博客终于开通了
    VC++ 运行库官方安装包
    文本编辑器通用快捷键
    gcc命令介绍
    MinGW安装与配置
    windows常见快捷键
    Notepad++配置C/C++
    Notepad++快捷键
  • 原文地址:https://www.cnblogs.com/geeksongs/p/13456710.html
Copyright © 2011-2022 走看看