我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法
java版本:
public class Solution { public static void main(String[] args){ long startTime=System.currentTimeMillis(); System.out.println("第23项的结果是:"+RectCover(23)); long endTime=System.currentTimeMillis(); System.out.println("程序执行的时间:"+(endTime-startTime)+"ms"); } /*递归*/ /*public static int RectCover(int target){ if(target<3){ return target; }else{ return RectCover(target-1)+RectCover(target-2); } }*/ /*非递归*/ public static int RectCover(int target){ if(target<2){ return target; }else{ int a=1; int b=2; int c=0; for(int i=3;i<=target;i++){ c=a+b; a=b; b=c; } return c; } } }
js版本:
function rectCover(number) { if(number<3){ return number; }else{ var a=1,b=2,c=0; for(var i=3;i<=number;i++){ c=a+b; a=b; b=c; } return c; } }
总结这道题用的也是斐波那契数列,思想和前几道题一致,不明白的同学可以翻翻我之前做过的题。故在此就不做详述,还是建议大家不用递归,时间复杂度较高。