Leetcode--最大正方形

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

示例:

输入: 

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

输出: 4

思路

参考Leetcode题解,详细解析可以查看原链接;

dp[i][j]= min(dp[i- 1][j- 1], min(dp[i- 1][j], dp[i][j- 1]))+ 1

可以看成是取以dp[i- 1][j- 1],dp[i- 1][j],dp[i][j- 1]为右下角的三个正方形的最小边长(可能为0)

class Solution {
public:
    int maximalSquare(vector>& matrix) {
        // 边界判断
        if(matrix.size()== 0|| matrix[0].size()== 0) return 0;

        int row= matrix.size(), col= matrix[0].size();
        vector > dp(row, vector(col, 0));
        int result= 0;
        for(int i= 0; i< row; ++i){
            for(int j= 0; j< col; ++j){
                if(matrix[i][j]== '1'){
                    // 如果为i= 0或j= 0的边就直接赋值
                    if(i== 0|| j== 0)
                        dp[i][j]= 1;
                    else
                        dp[i][j]= min(dp[i- 1][j- 1], min(dp[i- 1][j], dp[i][j- 1]))+ 1;
                    result= max(result, dp[i][j]);
                }
            }
        }
        return result* result;
    }
};

 

你可能感兴趣的:(leetcode)