LeetCode 221. 最大正方形(C、C++、python)

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

示例:

输入: 

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

输出: 4

C

int maximalSquare(char** matrix, int matrixRowSize, int matrixColSize) 
{    
    int m=matrixRowSize;
    int n=matrixColSize;
    if(0==m)
    {
        return 0;
    }
    int res=0;
    int** tmp=(int**)malloc(sizeof(int*)*m);
    for(int i=0;i<m;i++)
    {
        tmp[i]=(int*)malloc(sizeof(int)*n);
        memset(tmp[i],0,sizeof(int)*n);
    }    
    for(int i=0;i<m;i++)
    {
        if('1'==matrix[i][0])
        {
            tmp[i][0]=1;
            res=1;
        }
    }
    for(int j=0;j<n;j++)
    {
        if('1'==matrix[0][j])
        {
            tmp[0][j]=1;
            res=1;
        }
    }
    for(int i=1;i<m;i++)
    {
        for(int j=1;j<n;j++)
        {
            if('1'==matrix[i][j])
            {
                char cc=tmp[i-1][j]>tmp[i][j-1]?tmp[i][j-1]:tmp[i-1][j];
                tmp[i][j]=(cc>tmp[i-1][j-1]?tmp[i-1][j-1]:cc)+1;
                res=res>tmp[i][j]?res:tmp[i][j];
            }
        }
    }
    return res*res;
}

C++

class Solution {
public:
    int maximalSquare(vector<vector<char>>& matrix) 
    {
        if (matrix.empty()) 
        {
            return 0;            
        }
        int m=matrix.size();
        int n=matrix[0].size();
        int res=0;
        vector<vector<int>> tmp(m,vector<int>(n,0));
        for(int i=0;i<m;i++)
        {
            if('1'==matrix[i][0])
            {
                tmp[i][0]=1;
                res=1;
            }
        }
        for(int j=0;j<n;j++)
        {
            if('1'==matrix[0][j])
            {
                tmp[0][j]=1;
                res=1;
            }
        }
        for(int i=1;i<m;i++)
        {
            for(int j=1;j<n;j++)
            {
                if('1'==matrix[i][j])
                {
                    tmp[i][j]=min(min(tmp[i-1][j],tmp[i][j-1]),tmp[i-1][j-1])+1;
                    res=max(res,tmp[i][j]);
                }
            }
        }
        return res*res;        
    }
};

python

class Solution:
    def maximalSquare(self, matrix):
        """
        :type matrix: List[List[str]]
        :rtype: int
        """
        if not matrix:
            return 0
        m=len(matrix)
        n=len(matrix[0])
        res=0
        tmp=[[0 for j in range(n)] for i in range(m)]
        for i in range(m):
            if '1'==matrix[i][0]:
                tmp[i][0]=1
                res=1
        for j in range(n):
            if '1'==matrix[0][j]:
                tmp[0][j]=1
                res=1
        for i in range(1,m):
            for j in range(1,n):
                if '1'==matrix[i][j]:
                    tmp[i][j]=min(min(tmp[i-1][j],tmp[i][j-1]),tmp[i-1][j-1])+1
                    res=max(res,tmp[i][j])
        return res**2
                

猜你喜欢

转载自blog.csdn.net/qq_27060423/article/details/84441669