题目描述
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
示例1
- 输入
1
- 返回值
1
示例2
- 输入
4
- 返回值
5
解题思路
如果下一步是n阶台阶,则只有两种可能,一种是在n-1阶台阶,二种是在n-2阶台阶,因此F[n]=F[n-1]+F[n-2]。
我们可以清楚地知道:
(1)n=1时,只有一种可能,即F[1]=1
(2)n=2时,有两种可能,即F[2]=2
- 递归
public class Solution {
public int JumpFloor(int target) {
if(target == 1) {
return 1;
}
else if(target == 2) {
return 2;
}
return JumpFloor(target-1)+JumpFloor(target-2);
}
}
- 动态规划
import java.util.ArrayList;
import java.util.List;
public class Solution {
public int JumpFloor(int target) {
List<Integer> list = new ArrayList<>();
list.add(1); list.add(2);
for (int i=2; i<target; ++i) {
list.add(list.get(i-1) + list.get(i-2));
}
return list.get(target-1);
}
}
只需要返回最后一个,因此可以降低空间复杂度。
public class Solution {
public int JumpFloor(int target) {
if (target == 1 || target == 2) return target;
int a = 1, b = 2, c=0;
for (int i=2; i<target; ++i) {
c = a + b;
a = b;
b = c;
}
return c;
}
}
代码
import java.util.ArrayList;
import java.util.List;
public class Solution {
public int JumpFloor(int target) {
List<Integer> list = new ArrayList<>();
list.add(1); list.add(2);
for (int i=2; i<target; ++i) {
list.add(list.get(i-1) + list.get(i-2));
}
return list.get(target-1);
}
}