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】。文章转载请联系作者。











评论