5.8——221. 最大正方形

221. 最大正方形

在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。
 
 
1.解题思路(动态规划)
若形成正方形(非单 1),以当前为右下角的视角看,则需要:当前格、上、左、左上都是 1
可以换个角度:当前格、上、左、左上都不能受 0 的限制,才能成为正方形
递归式:dp(i, j) = min(dp(i-1, j), dp(i, j-1), dp(i-1, j-1)) + 1(grid(i, j) == 1时)
-图1:受限于左上的0
-图2:受限于上边的0
-图3:受限于左边的0
-数字表示:以此为正方形右下角的最大边长
-黄色表示:格子 ? 作为右下角的正方形区域
 
考虑到原数组的大小可能会出现索引越界问题,可以创建一个扩展上边和左边的dp数组
 
2.源码
3.暴力法源码
将所有的1放入到一个队列中。然后遍历这个队列。
以1作为正方形的左上角逐层向外寻找能够达到最大的正方形。
 

猜你喜欢

转载自www.cnblogs.com/xiaoqichaoren/p/12951868.html