10矩形覆盖–剑指offer, java版
题目描述
我们可以用21的小矩形横着或者竖着去覆盖更大的矩形。请问用n个21的小矩形无重叠地覆盖一个2n的大矩形,总共有多少种方法?
如当n=4时,用第一个21的小矩形覆盖最左边时有两个选择:
①竖着放, 则剩下有f(3)种可能
②横着放, 则左下角必须有一个横着放的小矩形,此时右边还剩下f(2)种可能
即f(4)=f(3)+f(2),可看出仍是斐波那契数列
public class Solution {
public int RectCover(int target) {
if(target == 0) return 0;
int[] result = {1,2};
if(target < 3) return result[target-1];
int sumOne = 1;
int sumTwo = 2;
int sum = 0;
for(int i = 2; i < target;i++ ){
sum = sumOne + sumTwo;
sumOne = sumTwo;
sumTwo = sum;
}
return sum;
}
}