剑指offer-JZ10

矩形覆盖

https://www.nowcoder.com/practice/72a5a919508a4251859fb2cfb987a0e6?tpId=13&tqId=11163&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey

C++
依然考察变种的斐波那契数列。
针对 图片说明 的矩阵,有两种添加方法:
1-在图片说明 的所有矩阵很难后面后面,竖着添加一个,那么有图片说明
2-在图片说明 的矩阵后面横着添加2个,那么有图片说明
其中
图片说明
没有可以计算得到的规律,GG。

方法一:递归

class Solution {
public:
    int rectCover(int number) {
        if(number == 1  || number == 2) return number;
        return rectCover(number-1)+rectCover(number-2);
    }
};

然而 内存超出, 可能是number 太大了, 尝试增加记忆,

class Solution {
public:
    int Fib(int n, vector<int> &dp){
        if(n==0 || n==1 ||n==2) return n;
        if(dp[n] != -1) return dp[n];
        return dp[n]=Fib(n-1, dp)+ Fib(n-2, dp);
    }
    int rectCover(int number) {
        vector<int> dp(number+1, -1);
        return Fib(number, dp);
    }
};

方法二,动态规划

class Solution {
public:
    int rectCover(int number) {
        if(number==0 || number==1 || number==2) return number;
        int tmp1=2, tmp2=1, ans;
        for(int i=3;i<=number; i++){
            ans = tmp1 + tmp2;
            tmp2 = tmp1;
            tmp1 = ans;
        }
        return ans;
    }
};

方法三,直接计算,暴力法,
时间复杂度图片说明
空间复杂度图片说明

class Solution {
public:
    int rectCover(int number) {
        vector<int> f(number+1, 0);
        f[1]=1;
        f[2]=2;
        for(int i=3;i<=number; i++){
            f[i]=f[i-1]+f[i-2];
        }
        return f[number];
    }
};
全部评论

相关推荐

一个帅气潇洒的豆子:小公司
点赞 评论 收藏
分享
09-05 02:50
已编辑
南京理工大学 Java
大拿老师:你只要把实验室项目放第一个,就应该有面试了 但是面试通过率应该不高 现在的问题很明确,就是你的简历主项目是一个烂大街的,而你的学历在大厂又是最差的 校招简历上只有这两个东西是不一样的,一个是学校,一个是主项目 你这两个目前都是最差的,大厂又是在笔试后,面试官谁简历的时候肯定过不了
点赞 评论 收藏
分享
头像
10-16 09:14
已编辑
门头沟学院 C++
影石 音视频渲染 n*15
这offer是俺拾嘞:华为可以
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务