题解 | #矩形覆盖#

矩形覆盖

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

class Solution {
public:
    int rectCover(int number) {
        if(number < 1 ) return 0;
        if(number == 1) return 1;
        if(number == 2) return 2;
        return countCore(number, 1, 2);
    }

    int countCore(int n, int n1, int n2){
        if(n == 2) return n2;
        return countCore(n-1, n2, n2+n1);
    }
};

从number0开始分析:

number method
0 0
1 1
2 2
3 3

实际上,3种以后可以考虑左边数第一个是横着放还是竖着放:
横着放,右边剩下的就是3-2 = 1个宽度;
竖着放,右边剩下的就是3-1 = 2个宽度。
即:
f(n) = f(n-1) + f(n-2)
本质是一个斐波那契数。使用tail recursion实现。递归的第一个参数为递归层深,最后一个参数传入累计结果,达到层深后返回累计结果即可。

全部评论

相关推荐

秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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