Skip to content

Commit 3067999

Browse files
committed
feat: add questtion 221
1 parent 95abdbf commit 3067999

File tree

2 files changed

+43
-0
lines changed

2 files changed

+43
-0
lines changed

221.data

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[["1"]]

221.最大正方形.js

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
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+

0 commit comments

Comments
 (0)