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

思路分析:使用动态规划。
转移方程为dp[row][col] = 1 + min(dp[row-1][col-1], min(dp[row-1][col], dp[row][col-1]));
在这里插入图片描述

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        int rowSize = matrix.size();
        if (rowSize == 0){
            return 0;
        }
        int colSize = matrix[0].size();
        if (colSize == 0){
            return 0;
        }
        int maxRes = 0;//最大的正方形边长
        /**
        dp[i][j]表示以第i行第j列为右下角所能构成的最大正方形边长, 则递推式为: 
        dp[i][j] = 1 + min(dp[i-1][j-1], dp[i-1][j], dp[i][j-1]);
        **/
        vector<vector<int>> dp(rowSize + 1, vector<int>(colSize + 1, 0));
        for (int row = 1; row <= rowSize; ++row){
            for (int col = 1; col <= colSize; ++col){
                if (matrix[row - 1][col - 1] == '1'){
                    dp[row][col] = 1 + min(dp[row-1][col-1], min(dp[row-1][col], dp[row][col-1]));
                    maxRes = max(maxRes, dp[row][col]);//更新结果
                }
            }
        }
        return maxRes * maxRes;//返回面积
    }
};

猜你喜欢

转载自blog.csdn.net/qq_41855420/article/details/88075959