221. 最大正方形

221. 最大正方形


题目链接:221. 最大正方形

代码如下:

//动态规划
//参考官方leetcode题解
class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) {
        if(matrix.size()==0||matrix[0].size()==0)   return 0;

        //dp[i][j]代表以(i,j)为右下角,且只包含1的正方形边长的最大值
        vector<vector<int>> dp(matrix.size(),vector<int>(matrix[0].size()));
        int maxSide=0;
        for(int i=0;i<matrix.size();i++)
        {
            for(int j=0;j<matrix[0].size();j++)
            {
                if(matrix[i][j]=='1')
                {
                    if(i==0||j==0)
                        dp[i][j]=1;
                    else
                        dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
                    maxSide=max(maxSide,dp[i][j]);
                } 
            }
        }
        return maxSide*maxSide;
    }
};

你可能感兴趣的:(leetcode,c++)