属实是完全分析不出来的动态规划了…来看看官解怎么说
第 i 列的正方形有以下四种情况:

初始条件:dp[0][3]=1,其余dp均为0
返回值:dp[n][3]
class Solution {
static final int MOD=1000000007;
public int numTilings(int n) {
int[][] dp=new int[n+1][4];
dp[0][3]=1;
for(int i=1;i<=n;i++){
dp[i][0]=dp[i-1][3];
dp[i][1]=(dp[i-1][0]+dp[i-1][2])%MOD;
dp[i][2]=(dp[i-1][0]+dp[i-1][1])%MOD;
dp[i][3]=(((dp[i-1][0]+dp[i-1][1])%MOD+dp[i-1][2])%MOD+dp[i-1][3])%MOD;
}
return dp[n][3];
}
}
时间复杂度: O ( n ) O(n) O(n)
空间复杂度: O ( n ) O(n) O(n)