题目
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个 n 级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
数据范围:1≤n≤40。
要求:时间复杂度:O(n),空间复杂度: O(1)。
示例1
输入:2
返回值:2
说明:青蛙要跳上两级台阶有两种跳法,分别是:先跳一级,再跳一级或者直接跳两级。因此答案为2。
示例2
输入:7
返回值:21
思路1:递归
- 当n等于1的时候,只需要跳一次即可,只有一种跳法,记f(1)=1。
- 当n等于2的时候,可以先跳一级再跳一级,或者直接跳二级,共有2种跳法,记f(2)=2。
- 当n等于3的时候,他可以从一级台阶上跳两步上来,也可以从二级台阶上跳一步上来,所以总共有f(3)=f(2)+f(1)。
- 同理当等于n的时候,总共有f(n)=f(n-1)+f(n-2)(这里n>2)种跳法。
代码1
public class Solution {
public int jumpFloor(int target) {
if(target == 1) {
return 1;
} else if(target == 2) {
return 2;
} else {
return jumpFloor(target - 1) + jumpFloor(target - 2);
}
}
}
思路2:非递归
代码2
public class Solution {
public int jumpFloor(int target) {
if(target == 1) {
return 1;
} else if(target == 2) {
return 2;
}
int f1 = 1;
int f2 = 2;
int cur = 0;
for(int i = 3; i <= target; i++) {
cur = f1 + f2;
f1 = f2;
f2 = cur;
}
return cur;
}
}