题目:我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
1 public class Solution { 2 public int RectCover(int target) { 3 int a = 0; 4 if (target < 1) 5 a = 0; 6 if (target == 1) 7 a = 1; 8 if (target == 2) 9 a = 2; 10 if (target >= 3) 11 a = RectCover(target-1)+RectCover(target-2); 12 return a; 13 } 14 }
return的值必须在方法之内
该题思考后为用任意1和2相加得到n的方法总数
此外,此处思考时逆向思考,对于n>=3的情况,假设最后一步是占了一列的覆盖法,则为f(n-1)种方法,即前n-1列的覆盖方式;
假设最后一步是占了两列的覆盖法,则为f(n-2)种方法,即前n-2列的覆盖方法,故其为法f(n) = f(n-1)+f(n-2);
if语句的另一种:
1 public class Solution { 2 public int RectCover(int target) { 3 int a = 0; 4 if (target < 1) 5 a = 0; 6 else if (target == 1) 7 a = 1; 8 else if (target == 2) 9 a = 2; 10 else 11 a = RectCover(target-1)+RectCover(target-2); 12 return a; 13 } 14 }
illegal start of type错误:因为之前将return放在方法之外了,即 } 符号之外~
原文:https://www.cnblogs.com/10081-AA/p/10533402.html