- 题目要求:
-
思路:
- 遍历数组,每当遇见一块海洋,把统计的海洋数量加一,并把这块海洋所有的 1 都变为 0
- 外围代码:
res = 0
cur = []
# 遍历数组
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