题解 | JAVA #最大正方形# [P0-T2]

最大正方形

http://www.nowcoder.com/practice/0058c4092cec44c2975e38223f10470e

mem[i][j]: 右下角坐标为(i,j)分正方形最大边长

if matrix[i][j] = 1: 
  mem[i][j] = 1+ MIN{
     mem[i-1][j], 
     mem[i-1][j-1], 
     mem[i][j-1]
  }
import java.util.*;

public class Solution {
    public int solve (char[][] matrix) {
      if (matrix.length == 0 || matrix[0].length == 0) return 0;
      
      // 把char换成int. 题目给char是真的烦
      int[][] mem = new int[matrix.length][matrix[0].length];
      for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix[0].length; j++) {
          mem[i][j] = (matrix[i][j] == '1') ? 1 : 0;
        }
      }
      
      int maxW = 0;
      // mem[0][j] and mem[i][0]都等于matrix[i][j], 不用再算
      for (int i = 1; i < matrix.length; i++) {
        for (int j = 1; j < matrix[0].length; j++) {
          if (mem[i][j] == 0) {
            continue;
          }
          mem[i][j] = 1 + Math.min(mem[i-1][j], 
                                   Math.min(mem[i][j-1], mem[i-1][j-1]));
          maxW = Math.max(maxW, mem[i][j]);
        }
      }
      
      return maxW * maxW;
    }
}
全部评论

相关推荐

10-24 13:36
门头沟学院 Java
Zzzzoooo:更新:今天下午有hr联系我去不去客户端,拒了
点赞 评论 收藏
分享
头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务