• 题目要求:


  • 思路:

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