Leetcode 221 最大正方形
解法
通过暴力法,一点一点的尝试。
动态规划,一个位置的能构成的最大正方形,是依赖三个位置的。
代码
暴力法
public int maximalSquare(char[][] matrix) {
int max=Integer.MIN_VALUE;
for(int i=0;i<matrix.length;i++)
for(int j=0;j<matrix[0].length;j++)
{
if(matrix[i][j]=='1')
{
max=Math.max(max,f(matrix,i,j));
}
}
return max==Integer.MIN_VALUE?0:max;
}
public int f(char[][] matrix,int i,int j)
{
int s=1;
while(i+s<matrix.length&&j+s<matrix[0].length&&matrix[i+s][j+s]=='1'){
for(int q=0;q<s;q++)
{
if(matrix[i+s][j+q]!='1') return s*s;
}
for(int q=0;q<s;q++)
{
if(matrix[i+q][j+s]!='1') return s*s;
}
s++;
}
return s*s;
}动态规划
public int maximalSquare(char[][] matrix) {
if(matrix.length==0) return 0;
int[][] dp=new int[matrix.length+1][matrix[0].length+1];
int max=Integer.MIN_VALUE;
for(int i=0;i<matrix.length;i++)
{
for(int j=0;j<matrix[0].length;j++)
{
if(matrix[i][j]=='1')
{
int min=Math.min(dp[i][j],dp[i][j+1]);
min=Math.min(min,dp[i+1][j])+1;
dp[i+1][j+1]=min;
max=Math.max(max,dp[i+1][j+1]);
}
}
}
return max*max;
}代码总结 文章被收录于专栏
典型的代码,以及自己的想法
海康威视公司福利 1125人发布
查看19道真题和解析