public class Solution {
/*方式一:递归*/
public int rectCover(int target) {
if(target == 0) return 0;
if(target == 1) return 1;
if(target == 2) return 2;
return rectCover(target-1)+rectCover(target-2);
}
/*方式二:动态规划思想--dp存值*/
public int rectCover2(int target) {
if(target == 0) return 0;
if(target == 1) return 1;
if(target == 2) return 2;
int[] dp = new int[target + 1];
dp[1]=1;
dp[2]=2;
for (int i = 3; i <= target; i++) {
dp[i] = dp[i-1]+dp[i-2];
}
return dp[target];
}
/*方式三:动态规划思想--存结果值*/
public int rectCover3(int target) {
if(target == 0) return 0;
if(target == 1) return 1;
if(target == 2) return 2;
int num1=1;
int num2=2;
int result = 0;
for (int i = 3; i <=target; i++) {
result = num1+num2;
num1 = num2;
num2 = result;
}
return result;
}
}
解题思想:递归(找规律)或者动态规划(数组存值或者结果赋值)

京公网安备 11010502036488号