跳台阶+变态跳台阶+矩阵覆盖

跳台阶和变态跳台阶这两道题比较类似,就放到一块来了
这两道题的解题思路我是用的一样的,都是递归求解
当每次只能跳1或2台阶时候,f(n) = f(n-2) + f(n-1),f(1) = 1,f(2) = 2
而当每次可跳1或2或3一直到n台阶时,f(n) = f(n-1) + f(n-2) + ... + 1,同样 f(1) = 1,f(2) =2
此外,矩阵覆盖的题目和跳台阶的解法一样,代码也几乎一样,规律同跳台阶


下面贴两道题的代码

跳台阶:

public class Solution {
    public int JumpFloor(int target) {
        if(target == 1 || target == 2){
            return target;
        }else if(target > 2){
            return JumpFloor(target-1) + JumpFloor(target-2); 
        }else{
            return 0;
        }
    }
}

变态跳台阶:

public class Solution {
    public int JumpFloorII(int target) {
        /* 这里可以按照上一题的思路来做
        *  f(n) = f(n-1) + f(n-2) + ... + 1
        *  f(1) = 1, f(2) = 2
        */
        if(target == 1 || target == 2){
            return target;
        }else if(target > 2){
            int sum = 1;
            while(target-1 > 0){
                sum += JumpFloorII(--target);
            }
            return sum;
        }else{
            return -1;
        }
    }
}

矩阵覆盖:

public class Solution {
    public int RectCover(int target) {
        if(target == 1 || target == 2){
            return target;
        }else if(target > 2){
            return RectCover(target - 1) + RectCover(target - 2);
        }else{
            return 0;
        }
    }
}

递归求解的小结:
解题法:找规律->明思路->转结构->代码实现
重点在于 找规律 和 灵活运用递归等结构

什么是递归,什么是迭代
递归:写出第一个样例,剩下的交由程序自己按照模式做,直到判定条件失效
迭代:循环


进度 13/66

posted @ 2019-05-05 21:30  AloeAndClover  阅读(264)  评论(0编辑  收藏  举报