File tree Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Original file line number Diff line number Diff line change
1
+ [["1"]]
Original file line number Diff line number Diff line change
1
+ /*
2
+ * @lc app=leetcode.cn id=221 lang=javascript
3
+ *
4
+ * [221] 最大正方形
5
+ *
6
+ * 1. 动态规划, dp[i][j] 表示以 dp[i][j] 作为右下角块的正方形边长
7
+ * 2. 方程: dp[i][j] = Math.min(dp[i - 1][j - 1], dp[i - 1][j], dp[i][j - 1]) + 1
8
+ * 1. 方块 dp[i][j] 需要其 左方、上方、左上方 方块存在才能构成正方形
9
+ * 2. 如果 左方、上方、左上方 方块也都构成了 2 * 2 的正方形, 则当前方块加入后能构成 3 * 3 的正方形
10
+ * 3. 所以要取 左方、上方、左上方 构成方块的最小值
11
+ * 3. 取 dp 最大值, 求平方得到面积, 即答案
12
+ */
13
+
14
+ // @lc code=start
15
+ /**
16
+ * @param {character[][] } matrix
17
+ * @return {number }
18
+ */
19
+ var maximalSquare = function ( matrix ) {
20
+ const dp = [ ] ;
21
+ let result = 0 ;
22
+
23
+ for ( let i = 0 ; i < matrix . length ; i ++ ) {
24
+ dp [ i ] = [ ] ;
25
+ for ( let j = 0 ; j < matrix [ 0 ] . length ; j ++ ) {
26
+ dp [ i ] [ j ] = + matrix [ i ] [ j ] ;
27
+ }
28
+ }
29
+
30
+ for ( let i = 0 ; i < matrix . length ; i ++ ) {
31
+ for ( let j = 0 ; j < matrix [ 0 ] . length ; j ++ ) {
32
+ if ( ! ( i === 0 || j === 0 || dp [ i ] [ j ] === 0 ) ) {
33
+ dp [ i ] [ j ] = Math . min ( dp [ i - 1 ] [ j - 1 ] , dp [ i - 1 ] [ j ] , dp [ i ] [ j - 1 ] ) + 1 ;
34
+ }
35
+ result = Math . max ( result , dp [ i ] [ j ] ) ;
36
+ }
37
+ }
38
+
39
+ return result ** 2 ;
40
+ } ;
41
+ // @lc code=end
42
+
You can’t perform that action at this time.
0 commit comments