LeetCode 221. 最大正方形(C、C++、python)
阿新 • • 發佈:2018-11-25
在一個由 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