具体思路:
和211题同思路;
唯一不同的是以ij为右下角的矩阵,dp内容为边长,l边长的矩阵可以由右下角生成出l个矩阵;
具体代码:
class Solution {
public:
int countSquares(vector<vector<int>>& matrix) {
int m=matrix.size();
int n=matrix[0].size();
int ret=0;
vector<vector<int>>dp(m,vector<int>(n,0));
for(int i=0;i<m;i++){
if(matrix[i][0]==1){
dp[i][0]=1;
ret++;
}
}
for(int i=1;i<n;i++){
if(matrix[0][i]==1){
dp[0][i]=1;
ret++;
}
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
if(matrix[i][j]==1)
dp[i][j]=min(dp[i-1][j-1],min(dp[i][j-1],dp[i-1][j]))+1;
ret+=dp[i][j];
}
}
return ret;
}
};