Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit f6557d7

Browse files
authored
Update 0200.岛屿数量.深搜版.md
1 parent 4e0ec1f commit f6557d7

File tree

1 file changed

+31
-40
lines changed

1 file changed

+31
-40
lines changed

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

Lines changed: 31 additions & 40 deletions
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+
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

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /