Maximal Square

原题地址:点我传送

要找一个最大的全1正方形,假设它的右下方点的坐标为i,j。P(i,j)表示它做正方形右下角点时最大正方形的尺寸,则显然P(i,j)是它左,上,左上三个点P值的最小值 + 1。(也就是说要产生更大的正方形,则它的这三个点都必须有比这小1的正方形。)_但若此时该点为0,则P=0。最后最大的P就是解。

C++:

class Solution {
public:
    int maximalSquare(vector>& matrix) 
    {
        int ans = 0;
        int** sq = new int* [matrix.size()];
        for(int i = 0;i< matrix.size() ; i++)
        {
            sq[i] = new int [matrix[0].size()];
            for(int j = 0;j < matrix[0].size() ; j++)
            {
                sq[i][j] = (matrix[i][j]-'0');
            }
        }
        for(int i = 0;i< matrix.size() ; i++)
        {
            for(int j = 0;j < matrix[0].size() ; j++)
            {
                int upleft = (i&&j) ? (sq[i-1][j-1]) : 0; 
                int up = (i) ? (sq[i-1][j]) : 0; 
                int left = (j) ? (sq[i][j-1]) : 0; 
                sq[i][j] = (sq[i][j]) ? (min(up,min(upleft,left))+1) : 0 ;
                ans = ans > sq[i][j] ? ans : sq[i][j] ;
            }
        }
        return ans*ans;
    }
};


你可能感兴趣的:(算法,动态规划,LeetCode)