练习动态规划被绊住的一题,最后发现其实就是最大连续字串和的变种,只是没想到可以用三维数组,看了题解如有所思。
class Solution {
public int largest1BorderedSquare(int[][] grid) {
数组第三维下标0为左边,下标1为上边
int dp[][][]=new int[grid.length+1][grid[0].length+1][2]; //多出来一行一列就是为了整合初始化
int length=0,max=0;
for(int i=1;i<=grid.length;i++){
for(int j=1;j<=grid[0].length;j++){
if(grid[i-1][j-1]==1 ){
dp[i][j][1]=dp[i-1][j][1]+1;
dp[i][j][0]=dp[i][j-1][0]+1;
length=Math.min(dp[i][j][1],dp[i][j][0]);
while(length>0){
if(dp[i][j+1-length][1]>=length && dp[i+1-length][j][0]>=length){
max=Math.max(max,length);
break;
}else{
length--;
}
}
}else{
dp[i][j][1]=0;
dp[i][j][0]=0;
}
}
}
return max*max;
}
}