1 //dp(i, j)=min(dp(i−1, j), dp(i−1, j−1), dp(i, j−1))+1 2 class Solution 3 { 4 public: 5 int maximalSquare(vector<vector<char>>& matrix) 6 { 7 if(matrix.empty() || matrix[0].empty()) return 0; 8 int m = matrix.size(),n = matrix[0].size(); 9 vector<vector<int>> dp(m,vector<int>(n,0)); 10 int res = 0; 11 for(int j = 0;j < n;j ++) 12 { 13 if(matrix[0][j] == ‘1‘) dp[0][j] = 1; 14 if(res < dp[0][j]) res = dp[0][j]; 15 } 16 17 for(int i = 1;i < m;i ++) 18 { 19 if(matrix[i][0] == ‘1‘) dp[i][0] = 1; 20 if(res < dp[i][0]) res = dp[i][0]; 21 } 22 23 for(int i = 1;i < m;i ++) 24 { 25 for(int j = 1;j < n;j ++) 26 { 27 if(matrix[i][j] == ‘0‘) continue; 28 dp[i][j] = min(dp[i][j - 1],min(dp[i - 1][j],dp[i - 1][j - 1])) + 1; 29 if(res < dp[i][j]) res = dp[i][j]; 30 } 31 } 32 33 return res * res; 34 } 35 };
原文:https://www.cnblogs.com/yuhong1103/p/12680702.html