跳台阶
题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路
跳到第n级就是从第n-1 级 和第 n-2 级跳上来的。 因此跳到n 等于 跳到 (n-1) 和(n-2)之和,即 f(n) = f(n-1)+f(n-2)
验证一下
格数 | 跳法 |
---|---|
1 | 1 |
2 | 2 |
3 | 3 |
4 | 5 |
… | … |
因此此题即为斐波那契数列的应用
思路一:递归法
public class Solution {
public int JumpFloor(int target) {
if(1 == target){
return 1;
}else if(2 == target){
return 2;
}else{
return JumpFloor(target - 1) + JumpFloor(target - 2);
}
}
}
思路二:循环法
public class Solution {
public int JumpFloor(int target) {
if(1 == target){
return 1;
}else if(2 == target){
return 2;
}
int f[] = new int [target+1];
f[0] = 1;
f[1] = 1;
for(int i = 2; i < target+1; i++){
f[i] = f[i-1]+f[i-2];
}
return f[target];
}
}
思路 | 运行时间 | 内存 |
---|---|---|
递归法 | 448ms | 9516k |
循环法 | 13ms | 9300k |