@@ -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+ 392395func 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+ for _ , d := range DIRECTIONS {
417+ x , y := i+d[0 ], j+d[1 ]
418+ if x < 0 || x >= len (grid) || y < 0 || y >= len (grid[0 ]) {
419+ continue
420+ }
421+ if grid[x][y] == ' 1' && !visited[x][y] {
422+ visited[x][y] = true
423+ dfs (grid, visited, x, y)
424+ }
425+ }
434426
435- return result
436427}
437428```
438429
0 commit comments