描述:给定一个 m * n 大小的二维非负整数矩阵 heights 来表示一片大陆上各个单元格的高度。heights[i][j] 表示第 i 行第 j 列所代表的陆地高度。这个二维矩阵所代表的陆地被太平洋和大西洋所包围着。左上角是「太平洋」,右下角是「大西洋」。规定水流只能按照上、下、左、右四个方向流动,且只能从高处流到低处,或者在同等高度上流动。
class Solution: def pacificAtlantic(self, heights: List[List[int]]) -> List[List[int]]: rows, cols = len(heights), len(heights[0]) pacific = [[False for _ in range(cols)] for _ in range(rows)] atlantic = [[False for _ in range(cols)] for _ in range(rows)] directs = [(0, 1), (0, -1), (1, 0), (-1, 0)] def dfs(i, j, visited): visited[i][j] = True for direct in directs: new_i = i + direct[0] new_j = j + direct[1] if new_i < 0 or new_i >= rows or new_j < 0 or new_j >= cols: continue if heights[new_i][new_j] >= heights[i][j] and not visited[new_i][new_j]: dfs(new_i, new_j, visited) for j in range(cols): dfs(0, j, pacific) dfs(rows - 1, j, atlantic) for i in range(rows): dfs(i, 0, pacific) dfs(i, cols - 1, atlantic) res = [] for i in range(rows): for j in range(cols): if pacific[i][j] and atlantic[i][j]: res.append([i, j]) return res