其他分享
首页 > 其他分享> > 221. 最大正方形

221. 最大正方形

作者:互联网

221. 最大正方形

在一个由 '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

动态规划

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        // 正方形,因此寻找边长即可
        // dp[i][j], 表示以i,j为右下角的正方形边长。
        // dp[i-1][j], dp[i-1][j-1], dp[i][j-1]中最短的边长, 再加上matrix[i][j]
        int m = matrix.size(), n = matrix[0].size(), ans = 0;
        vector<vector<int>> dp(m, vector<int>(n,0));
        for(int i = 0; i < m; ++i){
            for(int j = 0; j < n; ++j){
                // 边界条件
                if(!i)
                    dp[0][j] = (matrix[0][j] == '1'); 
                else if(!j)
                    dp[i][0] = (matrix[i][0] == '1');
                // 更新方程
                else if( matrix[i][j] == '1'){
                    int tmp = min(dp[i-1][j], dp[i][j-1]);
                    dp[i][j] = min(tmp, dp[i-1][j-1]) + 1;    
                }
                ans = max(ans, dp[i][j]);
            }
        }
        return ans*ans;
    }
};

标签:最大,int,正方形,221,边长,ans,dp,matrix
来源: https://www.cnblogs.com/alyosha/p/14646301.html