乐趣区

Leetcode200-岛屿数量-Python实现

  • 题目要求:


  • 思路:

    • 遍历数组,每当遇见一块海洋,把统计的海洋数量加一,并把这块海洋所有的 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
退出移动版