@@ -389,50 +389,41 @@ function numIslands(grid: string[][]): number {
389
389
### Go
390
390
391
391
``` go
392
+
393
+ var DIRECTIONS = [4 ][2 ]int {{-1 , 0 }, {0 , -1 }, {1 , 0 }, {0 , 1 }}
394
+
392
395
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
398
397
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
+ }
423
402
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
+ }
434
426
435
- return result
436
427
}
437
428
```
438
429
0 commit comments