【剑指offer】9.变态跳台阶[by Python]

题目描述

一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

解题思路

“变态跳台阶”是“青蛙跳台阶”的变体。虽然“青蛙跳台阶”的每阶的跳法的通式符合斐波那契数列的通式定义,但当前“变态跳台阶”则需要重新分析,找到变态跳台阶的规律,即通式。
我们用BT(x)来表示这个变态跳x阶台阶时所有的跳法总数。有以下结果:
台阶为1时:BT(1) = 1
台阶为2时:BT(2) = BT(1) + 1 (可以参考跳台阶里获取跳台阶的通式的分析过程:变态一次可以跳一格,那剩下的跳法一共有BT(1)种;变态也可以一次跳2格,此时跳法只有1种)
台阶为3时:BT(3) = BT(2) + BT(1) + 1 = 2*BT(2)
台阶为4时,BT(4) = BT(3) + BT(2) + BT(1) + 1= 2*BT(3)
… …
台阶为n时,BT(n) = BT(n-1) + BT(n-2) + … + BT(1) + 1 = 2*BT(n-1)

得到:当n>=1时,变态跳台阶的通式是:

BT(n) = 2*BT(n-1) n>0

如此一来,利用递归即可轻易获得结果。

Python

def jumpFloorII(self, number):
    if number < 2:
        return number
    return 2*self.jumpFloorII(number-1)
 
 
  • 1
  • 2
  • 3
  • 4
      <link href="https://csdnimg.cn/release/phoenix/mdeditor/markdown_views-258a4616f7.css" rel="stylesheet">
              </div>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值