跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。
思路:跳n级台阶相当于n-1和n-2级台阶的和
原因:n级台阶就相当于n-1级再跳一次一阶的和n-2级再跳一次2阶的
public class Solution {
public int JumpFloor(int target) {
if(target <= 2){
return target;//只跳一步的话有一种,跳两步的话有两种,同时还处理了n=0的情况
}
int pre2 = 1, pre1 = 2;
for (int i = 3; i <= target; i++){
int cur = pre2 + pre1;
pre2 = pre1;
pre1 = cur;
}
return pre1;
}
}
这是非递归的,这个递归的很好理解:
链接:https://www.nowcoder.com/questionTerminal/8c82a5b80378478f9484d87d1c5f12a4?answerType=1&f=discussion
来源:牛客网
public class Solution {
public int JumpFloor(int target) {
if (target==1 || target==0){
return 1;
}
else{
return JumpFloor(target-1)+JumpFloor(target-2);
}
}
}
所以说,这其实就是一个彻头彻尾的斐波那契问题,上面的非递归只是一个斐波那契的非递归解法.我前一道题的解法还能拿出来用:
public class Solution {
public int JumpFloor(int target) {
int n=target;
if(n<3){
return n;
}
int[] count=new int[3];
count[0]=1;
count[1]=2;
count[2]=3;
for(int i=2;i<n;i++){
count[i%3]=count[(i+1)%3]+count[(i+2)%3];
}
return count[(n-1)%3];
}
}

浙公网安备 33010602011771号