【剑指 offer】跳台阶 1

1. 问题描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。

2. 分析

  • 归纳推理:f_1 = 1, f_2 = 2, f_3 = 3,..., f_n = f_{n-1} + f_{n-2}
  • 最后推导的f_n = f_{n-1} + f_{n-2}如何理解呢?
    跳到第n个台阶的方法总数就是跳到第n-1个台阶的方法总数加上第n-2个台阶的总数。
  • 其实该题是Fibonacci数列的巧妙应用

3. python代码

  • 方法一:非递归 running time:0.000027
# -*- coding:utf-8 -*-
from time import clock
class Solution:
    def jumpFloor(self, number):
        # write code here
        if number == 1:
            return 1
        elif number == 2:
            return 2
        else:
            f1 = 1
            f2 = 2
            for i in range(3,number+1):
                fn = f1 + f2
                f1 = f2
                f2 = fn
            return fn

if __name__ == '__main__':
    start_time = clock()
    solution = Solution()
    print solution.jumpFloor(7)
    end_time = clock()
    print("time:%f" % (end_time - start_time))
  • 方法二 递归 running time:0.000060
# -*- coding:utf-8 -*-
from time import clock
class Solution: 
    def jumpFloor(self, number):
        # write code here
        if number == 1:
            return 1
        elif number == 2:
            return 2
        else:
            return self.jumpFloor(number-1) + self.jumpFloor(number-2)

if __name__ == '__main__':
    start_time = clock()
    solution = Solution()
    print solution.jumpFloor(7)
    end_time = clock()
    print("time:%f" % (end_time - start_time))
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容