leetcode-221. 最大正方形

 

 

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int m = matrix.size();
        int n = matrix[0].size();

        if(m==0)
            return 0;
        vector<vector<int>> dp(m, vector<int>(n,0));
        //dp[i][j],以matrix[i][j]为右下角且包含i,j在内的只包含1的正方形的边长最大值。
        int edge = 0;
        for(int i = 0; i < m; i++)
            for(int j = 0; j < n; j++){
                if(matrix[i][j] == '1'){
                    if(i==0||j==0)
                        dp[i][j] = 1;
                    else
                        dp[i][j] = min(min(dp[i][j-1],dp[i-1][j-1]),dp[i-1][j])+1;
                }
                edge = max(dp[i][j],edge);

            }
        return edge*edge;
        
    }
};

 

posted @ 2021-07-22 23:45  三一一一317  阅读(39)  评论(0)    收藏  举报