Skip to content

Commit 9928779

Browse files
Merge pull request youngyangyang04#2404 from fwqaaq/patch-1
Update 0200.岛屿数量.深搜版.md
2 parents 62fd172 + 26c4004 commit 9928779

File tree

1 file changed

+31
-40
lines changed

1 file changed

+31
-40
lines changed

problems/0200.岛屿数量.深搜版.md

+31-40
Original file line numberDiff line numberDiff line change
@@ -389,50 +389,41 @@ function numIslands(grid: string[][]): number {
389389
### Go
390390

391391
```go
392+
393+
var DIRECTIONS = [4][2]int{{-1, 0}, {0, -1}, {1, 0}, {0, 1}}
394+
392395
func numIslands(grid [][]byte) int {
393-
// 用1标记已访问
394-
visited := make([][]int, len(grid))
395-
for i := 0; i < len(visited); i++{
396-
visited[i] = make([]int, len(grid[0]))
397-
}
396+
res := 0
398397

399-
var bfs func(x, y int)
400-
bfs = func(x, y int){
401-
stack := make([][]int, 0)
402-
stack = append(stack, []int{x, y})
403-
moveX := []int{1, -1, 0, 0}
404-
moveY := []int{0, 0, 1, -1}
405-
406-
for len(stack) != 0{
407-
node := stack[len(stack) - 1]
408-
stack = stack[:len(stack) - 1]
409-
410-
for i := 0; i < 4; i++{
411-
dx := moveX[i] + node[0]
412-
dy := moveY[i] + node[1]
413-
if dx < 0 || dx >= len(grid) || dy < 0 || dy >= len(grid[0]) || visited[dx][dy] == 1{
414-
continue
415-
}
416-
visited[dx][dy] = 1
417-
if grid[dx][dy] == '1'{
418-
stack = append(stack, []int{dx,dy})
419-
}
420-
}
421-
}
422-
}
398+
visited := make([][]bool, len(grid))
399+
for i := 0; i < len(grid); i++ {
400+
visited[i] = make([]bool, len(grid[0]))
401+
}
423402

424-
result := 0
425-
for i := 0; i < len(grid); i++{
426-
for j := 0; j < len(grid[0]); j++{
427-
if visited[i][j] == 0 && grid[i][j] == '1'{
428-
bfs(i, j)
429-
visited[i][j] = 1
430-
result++
431-
}
432-
}
433-
}
403+
for i, rows := range grid {
404+
for j, v := range rows {
405+
if v == '1' && !visited[i][j] {
406+
res++
407+
dfs(grid, visited, i, j)
408+
}
409+
}
410+
}
411+
412+
return res
413+
}
414+
415+
func dfs(grid [][]byte, visited [][]bool, i, j int) {
416+
visited[x][y] = true
417+
for _, d := range DIRECTIONS {
418+
x, y := i+d[0], j+d[1]
419+
if x < 0 || x >= len(grid) || y < 0 || y >= len(grid[0]) {
420+
continue
421+
}
422+
if grid[x][y] == '1' && !visited[x][y] {
423+
dfs(grid, visited, x, y)
424+
}
425+
}
434426

435-
return result
436427
}
437428
```
438429

0 commit comments

Comments
 (0)