[每日一题] leetcode 221. 最大正方形

用dp

如果matrices[i][j] == '0'  dp[i][j] = 0  continue;

如果是左边界或者上边界 并且  dp[i][j] = 1;

否则 如果左  上 左上三个都是1  dp[i][j] = min(dp[i - 1][j - 1], dp[i][j - 1], dp[i - 1][j]) + 1;

否则 dp[i][j] = 1;

return 最大的dp值的平方;

 

 

class Solution {
public:
    int dp[330][330];
    int maximalSquare(vector<vector<char>>& matrix) {
        memset(dp, 0, sizeof(dp));
        int n = matrix.size();
        int m = matrix[0].size();
        int max_v = 0;
        for(int i = 0; i < n; i++)
        {
            for(int j = 0; j < m; j++)
            {
                if(matrix[i][j] == '0') continue;
                if(i == 0 || j == 0) dp[i][j] = 1;
                else 
                {
                    if(matrix[i - 1][j - 1] == '1' && matrix[i - 1][j] == '1' && matrix[i][j - 1] == '1') dp[i][j] = min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i][j - 1])) + 1;
                    else dp[i][j] = 1;
                }
                max_v = max(max_v, dp[i][j]);

            }
        }
        return max_v * max_v;

    }
};

 

posted @ 2021-05-06 16:50  WTSRUVF  阅读(38)  评论(0编辑  收藏  举报