- 题目要求:
-
思路:
- 遍历数组,每当遇见一块陆地,把统计的陆地数量加一,并把这块陆地所有的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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。