221. 最大正方形

 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 };

 

posted @ 2020-04-11 16:29  Jinxiaobo0509  阅读(134)  评论(0)    收藏  举报