221. Maximal Square解题报告

Description:

Given a 2D binary matrix filled with 0's and 1's, find the largest square containing only 1's and return its area.

Example:

For example, given the following matrix:

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

Return 4.

Link:

https://leetcode.com/problems/maximal-square/description/

解题方法:

DP:
假设dp[i][j]是以点[i][j]为右下角的正方形可以有的最大的边长。
那么dp[i][j] = min(dp[i - 1][j], min(dp[i][j - 1], dp[i - 1][j - 1]))。
解释:
当matrix[i][j] = 1时候,说明这个点可以从它左上,上,左三个方向来进一步扩大这三个方向的正方形,其扩大的值 = 这三个方向能形成正方形的边的最小值。

Tips:

Time Complexity:

O(mn)时间
O(mn)空间

完整代码:

int maximalSquare(vector<vector<char>>& matrix) {
    int row = matrix.size();
    if(!row)
        return 0;
    int col = matrix[0].size();
    if(!col)
        return 0;
    int result = 0;
    vector<vector<int>> dp(row, vector<int>(col, 0));
    for(int i = 0; i < row; i++) {
        for(int j = 0; j < col; j++) {
            if(i != 0 && j != 0)
                dp[i][j] += min(dp[i - 1][j], min(dp[i][j - 1], dp[i - 1][j - 1]));
            if(matrix[i][j] == '1')
                dp[i][j]++;
            else
                dp[i][j] = 0;
            result = max(result, dp[i][j]);
        }
    }
    return result * result;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,349评论 0 33
  • 动态规划(Dynamic Programming) 本文包括: 动态规划定义 状态转移方程 动态规划算法步骤 最长...
    廖少少阅读 8,654评论 0 18
  • papi酱(姜逸磊),集美貌与才华于一身的女子,从2013年起就在天涯尝试发布内容,2015年8月突然成名并迅速成...
    Sting阅读 10,985评论 1 14
  • 昨晚看剧到凌晨---legal high---很嗨就收不住了 就因为看到别人引用了剧情截图,手贱就带进去了 因为一...
    helen1990_阅读 1,664评论 0 0
  • 感赏儿子 今天早上依然能够按时起床,克服寒冷,克服困倦,克服对上学不好的观感。大冬天孩子坚持早起太不容易了! 感赏...
    邹凌_中阅读 1,079评论 0 5