剑指offer/Python版、JZ9/跳台阶扩展问题、解题思路详述
题目:跳台阶扩展问题
题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
示例1
输入:3
返回值:4
解题思路
本题与上面跳台阶问题的不同就在于本题不限一次所跳台阶的次数,它的解题思路主要用到动态规划,即分析第一次跳不同台阶数剩下的台阶的跳法来得到高度为n阶台阶所有的跳法数。
同上篇跳台阶文章可知,对于n阶台阶,该问题的表达式为:
F(n)=F(n-1)+F(n-2)+…+F(1-1) (1)
由上式可得:
F(n-1)=F(n-2)+F(n-3)+…+F(1-1) (2)
由上述两式(1)-(2)得F(n)-F(n-1)=F(n-1),即F(n)=2F(n-1) (3)
由(3)可知n阶台阶的跳法为公比为2,首项F(1)=1的等比数列,即F(n)=2**n-1。
代码实现
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number <= 0:
return 0
else:
return 2**(number - 1) #F(n)=2**n-1
如果你看后有所收获,欢迎点赞转发收藏,若文章存有错误,欢迎指正。