题目地址

https://www.nowcoder.com/practice/72a5a919508a4251859fb2cfb987a0e6?tpId=13&tqId=11163&tPage=1&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

题目描述

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

思路

  • 动态规划

  • 递推公式

    f(1) = 1
    f(2) = 2
    f(n) = f(n-1) + f(n-2)
    
  • 即前两项为 1 和 2 的斐波那契数列

与前两次做的题一样
同样用地动态规划的思想
剑指offer刷题笔记——跳台阶

剑指offer刷题笔记——变态跳台阶

code

class Solution {
public:
    int rectCover(int number) {
        if (number == 0)
            return 0;

        int f = 1;
        int g = 2;
        for (int i = 2; i <= number; i++) {
            g = g + f;
            f = g - f;
        }
        return f;
    }
};

剑指offer刷题笔记——矩形覆盖_编程题目