题解 | #矩形覆盖#

矩形覆盖

https://www.nowcoder.com/practice/72a5a919508a4251859fb2cfb987a0e6

3. 矩形覆盖

矩形覆盖_牛客题霸_牛客网

3.1 题目描述

题目描述:我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,从同一个方向看总共有多少种不同的方法?

实例1

比如n=3时,2*3的矩形块有3种不同的覆盖方法(从同一个方向看): alt

3.1 递归

这题的数据量小,递归仍然能AC

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

3.2 动态规划

res[i]表示有i种方式来放置矩形

class Solution {
  public:
    int rectCover(int num) {
        int res[num + 1];
        res[0] = 0, res[1] = 1, res[2] = 2;
        for (int i = 3; i <= num; ++i) {
            res[i] = res[i - 1] + res[i - 2];
        }
        return res[num];
    }
};

注意到res数组可以省略,代码如下

class Solution {
  public:
    int rectCover(int num) {
        if (num <= 2)    return num;
        int num1 = 1, num2 = 2, res = -1;
        for (int i = 3; i <= num; ++i) {
            res = num1 + num2;
            num1 = num2;
            num2 = res;
        }
        return res;
    }
};
全部评论

相关推荐

04-25 19:29
已编辑
宁波大学 运营
被普调的六边形战士很高大:你我美牛孩
点赞 评论 收藏
分享
04-27 08:59
常州大学 Java
牛客139242382号:《两门以上汇编语言》
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务