题目描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
解题思路:
我没有找到用显式递归解决该问题的方法,只是在解题过程中用到了递归的思想。
显而易见,n=1时只有一种方法。当n>=2时,可以分情况讨论青蛙跳的级数。若第一次跳1级,问题就变成了求青蛙跳n-1级有多少种方法;若第一次跳2级,问题就变成了求青蛙跳n-2级有多少种方法......依此类推,问题就分解成了一个求和问题。令M(n)是青蛙跳n级的方法,则M(n) = M(n-1) + M(n-2) + ......+ M(2) + M(1) + 1,这里最后加1是因为可以一下跳完n级。等式右边的式子实际上是多重递归,计算机会完成中间的复杂计算。
附上代码:
public class Solution {
public int JumpFloorII(int target) {
if(target == 1){
return 1;
}
if(target == 2){
return 2;
}
if(target >= 3){
int total = 1;
for(int i=1;i<target;i++){
total += JumpFloorII(i);
}
return total;
}
return 0;
}
}
性能结果:
运行时间:18ms,占用内存:9284K
优秀解法:
利用数学归纳法进行M(n)的进一步推导,可以得到M(n) = 1 (n=0或1);2*M(n-1)(n>=2)。这样就可以直接用显示递归求解。