LeetCode之最大正方形

1. 题目

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

示例:

输入: 
1 0 1 0 0
1 0 1 1 1
1 1 1 1 1
1 0 0 1 0

输出: 4

2. 代码

  • 函数
  1. vector dp(m+1, vector(n+1, 0)); 定义二维vector以及其初始化!!!
  2. 当测试用例是 [] 的时候,只有row的值, 没有col的值
  3. min 和 max只有两个参数,第三个参数如果有的话为operation。 所以我们采用的是
    min(dp[i-1][j], min(dp[i-1][j-1], dp[i][j-1])) 嵌套min
  • 核心思想
  1. 我们了解到最大的正方形应该是从
  2. DP[i][j]来记录以点i,j为右下角的全1矩阵的最大边长。 即DP[i][j]表示的是边长大小!!!
  3. dp[i][j] = min(dp[i-1][j], min(dp[i-1][j-1], dp[i][j-1])) + 1;
    LeetCode之最大正方形_第1张图片
class Solution {
public:
    int maximalSquare(vector>& matrix) {
        int m = matrix.size();
        if(m==0) return 0;       //防止测试用例是  [], 这个时候,只有所谓的行m, 不存在n。   
        int n = matrix[0].size();
        int maxSqr = 0;
        vector> dp(m+1, vector(n+1, 0));
        for(int i=1; i<=m; i++) {     
            for(int j=1; j<=n; j++) {
                if(matrix[i-1][j-1] == '1') {     //只有当其左上角是1的时候才执行下面的操作
                    dp[i][j] = min(dp[i-1][j], min(dp[i-1][j-1], dp[i][j-1])) + 1;
                    maxSqr = max(dp[i][j], maxSqr);
                }
            }
        }
        return maxSqr * maxSqr;
    }
};

你可能感兴趣的:(LeetCode,动态规划)