问题描述(原题链接)
在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内,找到只包含 ‘1’ 的最大正方形,并返回其面积。
代码:
动态规划
class Solution {
public int maximalSquare(char[][] matrix) {
//暴力解法:
int line = matrix.length;
int row = matrix[0].length;
int max = 0;
int[][] dp = new int[line][row];
for(int i=0;i<line;i++)
for(int j=0;j<row;j++){
if(matrix[i][j]=='0'){
dp[i][j]=0;
}else{
if(i==0 || j==0){
dp[i][j]=1;
}else{
dp[i][j]=Math.min(dp[i-1][j-1],Math.min(dp[i-1][j],dp[i][j-1]))+1;
}
max = Math.max(max,dp[i][j]);
}
}
return max*max;
}
}
暴力搜索
class Solution {
public int maximalSquare(char[][] matrix) {
//暴力解法:
int line = matrix.length;
int row = matrix[0].length;
int max = 0;
for(int i=0;i<line;i++)
for(int j=0;j<row;j++){
if(matrix[i][j]=='1'){
int temp = 1;
int size = Math.min(line-i,row-j); //计算最大正方形长度
max=Math.max(max,temp);
for(int index=1;index<size;index++){
if(matrix[i+index][j+index]=='0'){
break;
}
boolean flag =true;
for(int m=0;m<index;m++){
if(matrix[i+index][j+m]=='0' || matrix[i+m][j+index]=='0'){
flag=false;
break;
}
}
if(!flag){
temp=temp+1;
max=Math.max(max,temp);
}else{
break;
}
}
}
}
return max*max;
}
}