695.max-area-of-island.go 607 B

123456789101112131415161718192021222324252627282930313233343536
  1. var detX = []int{1, 0, -1, 0}
  2. var detY = []int{0, 1, 0, -1}
  3. func maxAreaOfIsland(grid [][]int) (area int) {
  4. H := len(grid)
  5. if H == 0 {
  6. return
  7. }
  8. W := len(grid[0])
  9. for y := 0; y < H; y++ {
  10. for x := 0; x < W; x++ {
  11. area = maxInt(area, dfs(grid, W, H, x, y))
  12. }
  13. }
  14. return
  15. }
  16. func dfs(grid [][]int, W, H, x, y int) (area int) {
  17. if x < 0 || W <= x || y < 0 || H <= y || grid[y][x] == 0 {
  18. return
  19. }
  20. area++
  21. grid[y][x] = 0
  22. for i := 0; i < 4; i++ {
  23. nx, ny := x+detX[i], y+detY[i]
  24. area += dfs(grid, W, H, nx, ny)
  25. }
  26. return
  27. }
  28. func maxInt(x, y int) int {
  29. if x < y {
  30. return y
  31. }
  32. return x
  33. }