《剑指offer》—9、变态跳台阶

来源:互联网 发布:网络平台销售协议 编辑:程序博客网 时间:2024/05/21 21:41
题目描述
9、一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

解题思路:
假设第一次跳上1级台阶,剩余是n-1级,即跳法f(n-1);
假设第一次跳上2级台阶,剩余是n-2级,即跳法f(n-2);
假设第一次跳上3级台阶,剩余是n-3级,即跳法f(n-3);
... ...
假设第一次跳上n-1级台阶,剩余是1级,即跳法f(1);
假设第一次跳上n级台阶,剩余是0级,即跳法f(0);(表示n阶一次跳n阶次数)。
所以f(n) = f(n-1) + f(n-2) + ... + f(1) + f(0); ①
简化公式,有上述知跳n-1级台阶:f(n-1) = f(n-2) + ... + f(1) + f(0); ②
由①、② 即可推导出 f(n) =  f(n-1) + f(n-1) = 2 * f(n-1);最终结论如下:

             | 1,             ( n=0 ) 

f(n) =    | 1,              ( n=1 )

             | 2 * f(n-1), ( n>=2 )

n级有2的n-1种跳法,即2^(n-1)种跳法为了加快运算速度,可通过向左移位来完成乘以2的工作。

参考代码:
/*************************************************Copyright:牛客网在线编程《剑指offer》Author:zhouyuanDate:2017-02-27Description:变态跳台阶**************************************************/class Solution {public:int jumpFloorII(int number) {if (number <= 0) {return 0;}return 1 << --number;}};

1 0
原创粉丝点击