题目描述
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:zhouyuan
Date:2017-02-27
Description:变态跳台阶
**************************************************/
class Solution {
public:
int jumpFloorII(int number) {
if (number <= 0) {
return 0;
}
return 1 << --number;
}
};