LeetCode 221. 最大正方形(Maximal Square)

题目描述

 

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。

示例:

输入: 

1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

输出: 4

 

解题思路

 

动态规划思想,从左上依次遍历到右下,记录以当前位置为右下角顶点的最大正方形的边长,对每个位置作如下操作:

  • 若该位置为0,直接跳过
  • 若该位置为1,则分为两种情况:
    • 若其为左边界或上边界,则更新最大边长为当前数字;
    • 否则检查其紧邻左方、紧邻上方和左上角对应的数字,取他们的最小值再加1即为以当前位置为右下角顶点的正方形边长,并更新此时的最大正方形边长

 

代码

 

 1 class Solution {
 2 public:
 3     int maximalSquare(vector<vector<char>>& matrix) {
 4         int maxN = 0;
 5         for(int i = 0; i < matrix.size(); i++){
 6             for(int j = 0; j < matrix[0].size(); j++){
 7                 if(matrix[i][j] == '0') continue;
 8                 if(j == 0 || i == 0){
 9                     if(matrix[i][j] - '0' > maxN) maxN = matrix[i][j] - '0';
10                 }
11                 else if(matrix[i - 1][j - 1] > '0'){
12                     char x = min(matrix[i - 1][j - 1], matrix[i - 1][j]);
13                     x = min(x, matrix[i][j - 1]);
14                     matrix[i][j] = x + 1;
15                     if(matrix[i][j] - '0' > maxN) maxN = matrix[i][j] - '0';
16                 }
17             }
18         }
19         return maxN * maxN;
20     }
21 };

 

posted @ 2018-10-26 10:26  FlyingWarrior  阅读(511)  评论(0编辑  收藏  举报