Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit ff918a7

Browse files
committed
feat: 岛屿周长
1 parent cfd8ff4 commit ff918a7

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// https://leetcode-cn.com/problems/island-perimeter
2+
/**
3+
* @param {number[][]} grid
4+
* @return {number}
5+
*/
6+
var islandPerimeter = function (grid) {
7+
let yLen = grid.length;
8+
if (!yLen) return 0;
9+
let xLen = grid[0].length;
10+
11+
let perimeter = { value: 0 };
12+
13+
for (let y = 0; y < yLen; y++) {
14+
for (let x = 0; x < xLen; x++) {
15+
if (grid[y][x] === 1) {
16+
dfs(grid, y, x, perimeter);
17+
break;
18+
}
19+
}
20+
}
21+
22+
return perimeter.value;
23+
};
24+
25+
function dfs(grid, y, x, perimeter) {
26+
let cell = grid[y][x];
27+
if (cell === "COMPLETE") return;
28+
29+
grid[y][x] = "COMPLETE";
30+
31+
let below = grid[y - 1] && grid[y - 1][x];
32+
let upper = grid[y + 1] && grid[y + 1][x];
33+
let left = grid[y][x - 1];
34+
let right = grid[y][x + 1];
35+
36+
if (below) {
37+
dfs(grid, y - 1, x, perimeter);
38+
} else {
39+
perimeter.value++;
40+
}
41+
42+
if (upper) {
43+
dfs(grid, y + 1, x, perimeter);
44+
} else {
45+
perimeter.value++;
46+
}
47+
48+
if (left) {
49+
dfs(grid, y, x - 1, perimeter);
50+
} else {
51+
perimeter.value++;
52+
}
53+
54+
if (right) {
55+
dfs(grid, y, x + 1, perimeter);
56+
} else {
57+
perimeter.value++;
58+
}
59+
}
60+
61+
console.log(
62+
islandPerimeter([
63+
[0, 1, 0, 0],
64+
[1, 1, 1, 0],
65+
[0, 1, 0, 0],
66+
[1, 1, 0, 0],
67+
])
68+
);

0 commit comments

Comments
 (0)