动态规划解法 详解见视频

最大正方形

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

视频连接:https://www.bilibili.com/video/BV1po4y1d7C9/

class Solution:
    def solve(self , matrix ):
        if not matrix: return 0
        rows = len(matrix)
        cols = len(matrix[0])
        dp = [[0 for _ in range(cols)] for _ in range(rows)]
        res = 0

        # 上边界或者左边界 最大只可能有 1的矩阵 
        for i in range(rows):
            if matrix[i][0] == '1': 
                dp[i][0] = 1
        for j in range(cols): 
            if matrix[0][j] == '1':
                dp[0][j] = 1

        for row in range(1, rows):
            for col in range(1, cols):
                if matrix[row][col] == '1':
                    # 从左、左上、上 三个方向 判断是否 能够组成 最大矩阵
                    dp[row][col] = min(dp[row-1][col], dp[row][col-1], dp[row-1][col-1]) + 1
                    # 更新 最大值
                    res = max(res, dp[row][col])
        return res*res
全部评论

相关推荐

点赞 评论 收藏
分享
RickieOne:还有一个面试,上来就笔试算法 1️⃣ 字符串分割不能用 split ,ab&&c,根据&&放到数组上 2️⃣a 到 z 的全部组合情况,包括 a...z 3️⃣多线程,同时打印 1-200 4️⃣sql 代码 考分组 聚合 平均结合 小厂也这样吗,然后就八股 再拷打项目
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务