目录
1. 题目描述
2. 解题思路
3.【C++解法】
4. 输出结果
1. 题目描述
我们可以用 2*1 的小矩形横着或者竖着去覆盖更大的矩形。请问用 n 个 2*1 的小矩形无重叠地覆盖一个 2*n 的大矩形,总共有多少种方法?注意:约定 n == 0 时,输出 0。
2. 解题思路
当 n 为 1 时,只有一种覆盖方法:
当 n 为 2 时,有两种覆盖方法:
要覆盖 2*n 的大矩形,可以先覆盖 2*1 的矩形,再覆盖 2*(n-1) 的矩形;或者先覆盖 2*2 的矩形,再覆盖 2*(n-2) 的矩形。而覆盖 2*(n-1) 和 2*(n-2) 的矩形可以看成子问题。该问题的递推公式如下:
3.【C++解法】
#include <iostream>
#include <vector>
using namespace std;class Solution {
public:int rectCover(int number) {int f1 = 1, f2 = 2, fn = number;for (int i = 3; i <= number; i++) {fn = f1 + f2;f1 = f2;f2 = fn;}return fn;}
};int main()
{Solution test;//vector<int> input = {1,2,3,4,5,6,7,8};int result = test.rectCover(8);// for (auto var : result)//{// std::cout << "var:" << var << std::endl;//}std::cout << "result:" << result << std::endl;return 0;
}