题目描述:
在一个由 '0'
和 '1'
组成的二维矩阵内,找到只包含 '1'
的最大正方形,并返回其面积。
示例 1:
输入:matrix = [["1","0","1","0","0"],
["1","0","1","1","1"],
["1","1","1","1","1"],
["1","0","0","1","0"]]
输出:4
示例 2:
输入:matrix = [["0","1"],
["1","0"]]
输出:1
示例 3:
输入:matrix = [["0"]] 输出:0
解决方案:
1、防御性编程:判断处理空条件。
2、正方形面积所求==》判断对角数字,生成大一行列的面积容器(值设为 0)。
3、在‘1’的条件下,面积容器 dp 中每个对角数字取决于其左与上的值。
即:取两个值中的最小值+1(+1:防止面积不存在)。
函数代码:
class Solution { public: int maximalSquare(vector<vector<char>>& matrix) { if(matrix.empty()) return 0; int row=matrix.size(); int col=matrix[0].size(); vector<vector<int>>dp(row+1,vector<int>(col+1,0)); int maxSize=0; for(int i=1;i<=row;i++){ for(int j=1;j<=col;j++){ if(matrix[i-1][j-1]=='1'){ dp[i][j]=min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1]))+1; } maxSize=max(maxSize,dp[i][j]); } } return maxSize*maxSize; } };