Skip to content

Commit eef9a1d

Browse files
authored
number of islands solution
1 parent d7152a3 commit eef9a1d

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

number-of-islands/yhkee0404.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
var DRCS = [][]int{
2+
{0, -1,},
3+
{0, 1,},
4+
{-1, 0,},
5+
{1, 0,},
6+
}
7+
8+
func numIslands(grid [][]byte) int {
9+
visited := make([][]bool, len(grid)) // S(n) = O(n)
10+
for i, row := range grid {
11+
visited[i] = make([]bool, len(row))
12+
}
13+
ans := 0
14+
stack := [][]int{}
15+
for i, row := range grid {
16+
for j, c := range row {
17+
if visited[i][j] || c == '0' {
18+
continue
19+
}
20+
ans++
21+
visited[i][j] = true
22+
stack = append(stack, []int{i, j})
23+
for len(stack) != 0 { // T(n) = O(n)
24+
u := stack[len(stack) - 1]
25+
stack = stack[: len(stack) - 1]
26+
for _, drc := range DRCS {
27+
x := u[0] + drc[0]
28+
y := u[1] + drc[1]
29+
if x == -1 || x == len(grid) || y == -1 || y == len(row) ||
30+
grid[x][y] == '0' || visited[x][y] {
31+
continue
32+
}
33+
visited[x][y] = true
34+
stack = append(stack, []int{x, y})
35+
}
36+
}
37+
}
38+
}
39+
return ans
40+
}

0 commit comments

Comments
 (0)