一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
刚开始是知道这个是斐波那契数列的变形,可是老想不通这个逻辑,总觉得n级台阶,?青蛙可以跳一级,也可以跳两级,这是一个不确定决定,所以老绕不出这个圈圈。
最后我用了老办法,一级一级画,自己算出能跳几次,用数学归纳法总结?
n阶台阶 | 跳的次数 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 5 |
5 | 8 |
…… | …… |
这样应该就很明显了叭,哈哈哈哈哈哈?。递归我没写,因为递归在规模大时,即消耗内存,费时也多。
你要实在想写递归代码,可以看一下下边的变态跳台阶。
public class Solution {
public int JumpFloor(int target) {
if(target < 3){
return target;
}
int a = 1;
int b = 2;
int sum = 0;
for(int i = 3; i <= target; i++){
sum = a + b;
a = b;
b = sum;
}
return sum;
}
}
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
我叭现在相通这个道理了???,就做了这个变态跳台阶
规律就是:?
f(n) = f(n-1) + f(n-2) + f(n-3) + … + f(0)
f(n-1) = f(n-2) + f(n-3) + f(n-4) +… +f(0)
两式联合可以推出 f(n) = 2 * f(n-1)
public class Solution {
public int JumpFloorII(int target) {
if(target < 3){
return target;
}
return 2 * JumpFloorII(target -1);
}
}