变态跳台阶( python实现 )
一、题目描述
题目:变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级 …它也可以跳上 n 级,此时该青蛙跳上一个 n 级的台阶总共有多少种跳法?
二、解题思路
这里,我们做一个简单的推导。
因为青蛙可以跳1级,也可以跳2级…也可以跳n级。
那么,在 n>2 的前提下,我们分情况讨论。
情况 1:若青蛙第一步跳 1 级,剩下 n-1 级,相当于有 f(n-1) 种跳法;
情况 2:若青蛙第一步跳 2 级,剩下 n-2 级,相当于有 f(n-2) 种跳法;
情况 n-1:若青蛙第一步跳 n-1 级,还剩下 1 级,相当于还有 f(1) 种跳法;
情况 n:若青蛙第一步跳 n 级,还剩下 0 级,相当于就 1 种跳法;
最后将以上所有情况加起来,便得到 f(n) 的结果,如下:
其中, 表示求出来的 n 级台阶有多少种跳法 ,例如, 。(当 n = 1,就只有 1 种跳法,即 )
理解了公式 (1),同理也可得到公式 (2),如下:
接下来,公式 (1) 与公式 (2) 做减法,可以得到公式 (3),如下:
到这里,就不难发现其微妙之处了(哈哈哈,一开始被题目吓到的我终于放心了)。
根据公式 (3),我们可以将原问题转化成一个简单的问题,即 n 级台阶的跳法就是 n-1 级台阶跳法的 2 倍。
当 n = 1 时,只有 = 1 种跳法;
当 n = 2 时,则有 = 2 种跳法( 即 2 (1) );
当 n = 3 时,则有 = 4 种跳法( 即 2 (2) )。…
分析到这里,我们就来看看程序代码如何实现。
三、代码实现
这里的代码在 牛客网剑指offer:变态跳台阶 已测试通过,具体如下:
# -*- coding:utf-8 -*-
class Solution:
def jumpFloorII(self, number):
# write code here
if number == 0:
return 0
if number == 1:
return 1
return_number = 1
for i in range(2,number+1):
return_number = return_number * 2
return return_number
相关题目链接: