- 题目要求:
思路:
- 遍历数组,每当遇见一块海洋,把统计的海洋数量加一,并把这块海洋所有的1都变为0
- 外围代码:
res = 0cur = []# 遍历数组for i in range(len(grid)): for j in range(len(grid[0])): # 如果以后为海洋,把以后海洋变为0 if grid[i][j] == '1': # 留神是字符串 grid[i][j] = '0' # 把以后海洋的坐标退出到cur当中,因为要把这块海洋所有相邻的1都找到并变为0 cur.append((i,j)) while cur: # 取到这个点的下标 cur_i, cur_j = cur.pop(0) # 找它的上下左右 for x, y in [(1,0),(0,1),(-1,0),(0,-1)]: tmp_i = cur_i + x tmp_j = cur_j + y # 如果上下左右没有越界 if tmp_i >= 0 and tmp_i < len(grid) and tmp_j >= 0 and tmp_j < len(grid[0]): # 并且上下左右有是海洋的状况 if grid[tmp_i][tmp_j] == '1': # 把海洋变为0,并把这个海洋的下标退出到cur数组中,一会查看这个海洋四周是否还有海洋 grid[tmp_i][tmp_j] = '0' cur.append((tmp_i,tmp_j)) # 把统计的岛屿数量加一 res += 1 return res
- 残缺代码:
class Solution: def numIslands(self, grid: List[List[str]]) -> int: res = 0 cur = [] for i in range(len(grid)): for j in range(len(grid[0])): if grid[i][j] == '1': grid[i][j] = '0' cur.append((i,j)) while cur: cur_i, cur_j = cur.pop(0) for x, y in [(1,0),(0,1),(-1,0),(0,-1)]: tmp_i = cur_i + x tmp_j = cur_j + y if tmp_i >= 0 and tmp_i < len(grid) and tmp_j >= 0 and tmp_j < len(grid[0]): if grid[tmp_i][tmp_j] == '1': grid[tmp_i][tmp_j] = '0' cur.append((tmp_i,tmp_j)) res += 1 return res