在一個由 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;
}
};