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<vector<char>>& matrix) {
        // 边界判断
        if(matrix.size()== 0|| matrix[0].size()== 0) return 0;

        int row= matrix.size(), col= matrix[0].size();
        vector<vector<int> > dp(row, vector<int>(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;
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章