解题思路:根据提示,采用动态规划的方法求解。观察规律,除了单个元素的正方形,其余常规的正方形判断如下,
1 1
1 1
这是一个正方形,是因为arr[i-1][j-1],arr[i-1][j],arr[i][j-1],arr[i][j]的元素相同
增加问题规模,继续观察,
1 1 1
1 1 1
1 1 1
这是一个边长为3的正方形,同时包含四个边长为2的正方形
因此考虑当arr[i-1][j-1],arr[i-1][j],arr[i][j-1],arr[i][j]的元素相同时,将最右下角的元素表示为正方形的最大边长,即
1 1 1
1 2 2
1 2 3
最后输出边长最大的正方形面积
import java.util.*;
public class Solution {
/**
* 最大正方形
* @param matrix char字符型二维数组
* @return int整型
*/
public int solve (char[][] matrix) {
// write code here
int m=matrix.length;
int n=matrix[0].length;
int[][] dp=new int[m][n];
int max=0;
for(int i=0;i<m;i++){
dp[i][0]=matrix[i][0]-'0';
}
for(int i=0;i<n;i++){
dp[0][i]=matrix[0][i]-'0';
}
for(int i=1;i<m;i++){
for(int j=1;j<n;j++){
if(matrix[i][j]=='1'){
dp[i][j]=Math.min(dp[i-1][j-1],dp[i-1][j]);
dp[i][j]=Math.min(dp[i][j],dp[i][j-1])+1;
max=Math.max(max,dp[i][j]);
}
}
}
return max*max;
}
}
京公网安备 11010502036488号