剑指offer打卡4-矩形覆盖(java版) 1. 考察知识点2. 题目3. 思路4. 代码实现 1. 考察知识点 递归 2. 题目 我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?比如n=3时,2*3的矩形块有3种覆盖方法: 3. 思路 开始找规律。。。 1*n的矩形——1种方式2*n的矩形——2种方式3*n的矩形——3种方式4*n的矩形——5种方式5*n的矩形——8种方式6*n的矩形——13种方式 这时就会发现规律了,符合斐波那契数列 不知道斐波那契的小伙伴可以参考我的上一篇 剑指offer打卡1-斐波那契数列(java版). 4. 代码实现 普通版 public class Solution { public int RectCover(int target) { if(target < 1) return 0; if(target < 2) return 1; if(target < 3) return 2; int one = 1, two = 2; int result = 0; for(int i=3; i<=target; i++){ result = one + two; one = two; two = result; } return result; } } 递归版 public class Solution { public int RectCover(int target) { if(target < 1) return 0; if(target < 2) return 1; if(target < 3) return 2; return RectCover(target-1)+RectCover(target-2); } }