这道题,智商高些的大佬,可能分分钟就解决了,但是浪费了半天的时间。
一开始想的肯定是这类题,要找规律,从一开始计算。
然后就先找到n = 4的情况。
然后突然想到f(4) = f(3) * 2;
然后发现并不对。然后看到结果是少了,就想到肯定有重复。然后想到。
f(4) = f(3) * 2 - f(2) + f(1);
然后还是不对,这时候通过几次尝试的结果错误提示。瞎猜了下是f(4) = f(3) + f(2)。
然后一想确实是这样,第一个方块如果竖着放,就是f(n-1)。如果横着放,肯定就是f(n-2)。
答案当然就是f(n) = f(n-1) + f(n-2)。果然是这样,聪明的童鞋肯定一开始就能意识到是这个答案。
public class Solution {
public int RectCover(int target) {
int b = 1;
int c = 2;
int d = 2;
if(target <=2 ){
return target;
}
for(int i = 3;i<=target;i++){
d = b + c;
b = c;
c =d ;
}
return d;
}
}