LeetCode 题解:221. 最大正方形,动态规划,JavaScript,详细注释
原题链接:221. 最大正方形
解题思路:
假设
matrix[i][j] === ’1‘
,它自己是一个正方形。只有在
matrix[i - 1][j]
、matrix[i][j - 1]
、matrix[i - 1][j - 1]
都为'1'
的时候,才能形成一个更大的正方形。如果用
dp
数组递推,dp[i][j]
代表当前的最大正方形边长,它是由dp[i - 1][j]
、dp[i][j - 1]
、dp[i - 1][j - 1]
的状态递推而来。因此
dp
是一个(m+1)*(n+1)
的矩阵。matrix[i - 1][j - 1] === '1'
时,dp[i][j]
才可以与之前已知的边长组成新的正方形。由于是正方形,因此只能取之前状态的最小值,否则就成了长方形。状态转移方程为:
dp[i][j] = Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1
。当前位置的边长需要记为 1。每次递推后,都要记录当前得到的边长最大值
max
,最终返回max ** 2
,即为最大面积。
复制代码
版权声明: 本文为 InfoQ 作者【Lee Chen】的原创文章。
原文链接:【http://xie.infoq.cn/article/cb8f6d39f93cd42bfb59236e0】。文章转载请联系作者。
评论