跳台阶:
题目:
一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法。
方法:
多写出几个可以找到规律和斐波那契数列差不多的规律
n 方法数
1 1
2 2
3 3
4 5
... ...
n f(n-1)+f(n-2)
用递归可实现
代码:
public int solution(int target)
{
if(target == 1) {
return 1;
}
else if(target == 2) {
return 2;
}else{
return solution(target - 1) +
solution(target - 2);
}
}
变态跳台阶
题目:
一个台阶总共有n级,如果一次可以跳1级,也可以跳2级……也可以跳n级 求总共有多少总跳法。
方法:
想一下,不管有多少阶楼梯,都可以一下跳完,这种情况我们假定为F(0)=1。
假设有n阶,我们可以将楼梯分段来想,从递归的角度考虑,可以跳完n阶的情况分别是:
n=1时 一次跳完只有一种情况F(1)=1
n=2时 一次跳两步跳完和一次跳一步有两种情况飞F(2)=F(0)+F(1)
而当n=3时 第一次跳1步,还剩下2步,则还有F(3-1)=F(2)
第一次跳2步,还剩下1步,则还有F(3-2)=F(1)
第一次跳3步,则只有这一种跳法即F(3-3)=F(0)
依次类推 可以得出:
F(n) = F(0)+F(1)+F(2)+..........+F(n-1)
n 方法数
0 1
1 1
2 2
3 4
... ...
n F(0)+F(1)+F(2)+..........+F(n-1)
代码:
public class Solution {
public int JumpFloorII(int target) {
if(target == 0||target == 1)
return 1;
if(target == 2)
return 2;
int sum=0;
for(int i=0;i<target;i++){
sum += JumpFloorII(target);
}
return sum;
}
}