跳台阶

一只青蛙一次可以跳上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];
    }
}
posted @ 2020-02-27 21:50  别再闹了  阅读(51)  评论(0)    收藏  举报