1、官方題解:
class Solution {
public:
int countSquares(vector<vector<int>>& matrix) {
int m=matrix.size();
int n=matrix[0].size();
vector<vector<int>> f(m,vector<int>(n));
int ans=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(i==0||j==0)
{
f[i][j]=matrix[i][j];
}
else if(matrix[i][j]==0)
{
f[i][j]=0;
}
else if(matrix[i][j]==1)
{
f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1;
}
ans+=f[i][j];
}
}
return ans;
}
};
// class Solution {
// public:
// int countSquares(vector<vector<int>>& matrix) {
// int m = matrix.size(), n = matrix[0].size();
// vector<vector<int>> f(m, vector<int>(n));
// int ans = 0;
// for (int i = 0; i < m; ++i) {
// for (int j = 0; j < n; ++j) {
// if (i == 0 || j == 0) {
// f[i][j] = matrix[i][j];
// }
// else if (matrix[i][j] == 0) {
// f[i][j] = 0;
// }
// else {
// f[i][j] = min(min(f[i][j - 1], f[i - 1][j]), f[i - 1][j - 1]) + 1;
// }
// ans += f[i][j];
// }
// }
// return ans;
// }
// };