Leetcode Hot100 第六题 221. 最大正方形
动态规划题目
class Solution {
public:
int maximalSquare(vector<vector<char>>& matrix) {
// dp[i][j]定义为以(i,j)为右下角的只包含 '1'的最大正方形的边长
// 确定转移方程,如果(i,j)元素为'1',dp[i][j] = min(min(dp[i-1][j-1],dp[i][j-1]),dp[i-1][j])+1;
vector<vector<int>> dp = vector<vector<int>>(matrix.size(),vector<int>(matrix[0].size()));
int result = 0;
for(int i=0;i<matrix.size();i++){
if(matrix[i][0]=='1')
dp[i][0] = 1;
else
dp[i][0] = 0;
result = max(result,dp[i][0]);
}
for(int j=0;j<matrix[0].size();j++){
if(matrix[0][j]=='1')
dp[0][j] = 1;
else
dp[0][j] = 0;
result = max(result,dp[0][j]);
}
for(int i=1;i<matrix.size();i++){
for(int j=1;j<matrix[0].size();j++){
if(matrix[i][j]=='0') dp[i][j]=0;
else{
dp[i][j] = min(min(dp[i-1][j-1],dp[i][j-1]),dp[i-1][j])+1;
result = max(result,dp[i][j]);
}
}
}
return result*result;
}
};