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

 

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