leetcode 島嶼的個數 python
阿新 • • 發佈:2018-12-30
1 class Solution:
2 def numIslands(self, grid):
3 """
4 :type grid: List[List[str]]
5 :rtype: int
6 """
7 # 如果是空圖 返回沒有陸地
8 if not grid:
9 return 0
10 # 把原圖改變一下 四周加上一圈"0" 防止出界 方便遍歷
11 w, h = len(grid[0]), len(grid)
12 new_grid = [["0" for i in range(w + 2)]]
13 for g in grid:
14 new_grid.append(["0"] + g + ["0"])
15 new_grid.append(["0" for i in range(w + 2)])
16
17 num = 0 # 記錄陸地數量
18
19 # 遍歷除了周圍的"0" 中間的部分
20 for i in range(1, h+1):
21 for j in range(1, w+1):
22 if new_grid[i][j] == "1": # 如果是陸地 就進入深度遍歷
23 num += 1
24 self.deep_search(i, j, new_grid)
25
26 return num
27
28
29 def deep_search(self, i, j, grid):
30 """如果當前是陸地,把當前結點標記遍歷過,並分別看左右上下四個位置 """
31 if grid[i][j] == "0":
32 return
33 grid[i][j] = "0"
34 self.deep_search(i-1,j,grid)
35 self.deep_search(i,j-1,grid)
36 self.deep_search(i,j+1,grid)
37 self.deep_search(i+1,j,grid)
38