矩形覆盖 java
矩形覆盖
http://www.nowcoder.com/questionTerminal/72a5a919508a4251859fb2cfb987a0e6
只考虑 有n个1,n个2 这(1,2)两个数字怎么组合最后相加的和为target,可转换为兔子跳台阶,一次可跨1步或2步。
f(0)=0;
f(1)=1;
f(2)=2;
f(3)=f(1)+f(2)
f(n)=f(n-1)+f(n-2);
可以使用递归
也可以把组合的结果保存在一个链表中
public int RectCover(int target) { /* //递归 if(target<0){ throw new IllegalArgumentException("输入的数应大于0"); } if(target==1||target==2||target==0){ return target; } return RectCover(target-1)+RectCover(target-2);*/ //非递归 if(target<0){ throw new IllegalArgumentException("输入的数应大于0"); } if(target<3){ return target; }else{ int res; int n=3; ArrayList<Integer> resl = new ArrayList<>(); resl.add(0); resl.add(1); resl.add(2); while (n<=target){ resl.add(resl.get(n-1)+resl.get(n-2)); n+=1; } return resl.get(target); } }