题解 | #矩形覆盖#

矩形覆盖

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

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


其实这道题没有什么代码难度,主要是思考过程。我们在排列矩形时按照如下规律即可:
在 n-1个小矩形的所有排列方式中,只在其右边添加一块竖着放置的矩形
在 n-2个小矩形的所有排列方式中,只在其右边添加两块横着叠加放置的矩形
在这样的排列中,所有排列方式均不重复,故问题简化为一个斐波那契数列,问题得以解决。
时间复杂度 O(n)
空间复杂度 O(1)

public class Solution {
    public int rectCover(int target) {
        int m = 1;
        int n = 2;
        int result = 2;
        if(target == 0 || target == 1){
            return target;
        }
        for(int i=2; i<target; i++){
            result = m+n;
            m = n;
            n = result;
        }
        return result;
    }
}
全部评论

相关推荐

11-19 18:44
已编辑
成都理工大学 Java
程序员花海:我面试过100+校招生,大厂后端面试不看ACM,竞赛经历含金量低于你有几份大厂实习 这个简历整体来看不错 可以海投
如何写一份好简历
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 11:29
已编辑
斯卡蒂味的鱼汤:知道你不会来数马,就不捞你😂最近数马疯狂扩招,招聘要求挺低的,你能力肯定够,应该就是因为太强了,知道你不会来才不捞你
投递腾讯云智研发等公司7个岗位
点赞 评论 收藏
分享
12-27 22:36
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务