当你的才华还撑不起你的野心时,你应该静下心去学习 。
题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,从同一个方向看总共有多少种不同的方法?
比如n=3时,2*3的矩形块有3种不同的覆盖方法(从同一个方向看):
示例
假设f [n]表示2*n大矩阵的方法数。 如果你下用数学归纳法,先从简单的n=1、2、3开始计算,可以得出:f[n] = f[n-1] + f[n-2],初始条件f[1] = 1, f[2] =2 是不是感觉简单的斐波那契数列做了三天?
复杂度分析: 时间复杂度 O(N) : 计算 f(n) 需循环 n 次,每轮循环内计算操作使用 O(1) 。 空间复杂度 O(1) : 几个标志变量使用常数大小的额外空间。
参考代码 Java版本public class Solution {
public int RectCover(int target) {
// 被覆盖的目标矩形的形状: 2*n
// 每次新增加的一列,(1)如果竖着放对应的情况与 target为 n-1 时相同;
// (2如果横着放,对应的情况与 target 为 n-2 时相同。
if(target
关注
打赏
