Python, C++, JavaScript, SQL 및 TypeScript의 다양한 LeetCode 솔루션을 살펴보세요. 여러 프로그래밍 언어로 인터뷰 준비, 학습 및 코드 연습에 적합합니다. Github 레포 링크
이 있습니다 xn
두 섬의 경계를 이루는 직사각형 섬 태평양 그리고 대서양.그만큼 태평양 섬의 왼쪽과 위쪽 가장자리에 닿습니다. 대서양 섬의 오른쪽과 아래쪽 가장자리에 닿습니다.
섬은 정사각형 셀의 격자로 분할되어 있습니다. xn
정수 행렬 높이
어디 높이[r][c]
을 나타냅니다 해발 높이 좌표에 있는 셀의 (r,c)
.
섬은 비가 많이 내리는데, 이웃 셀의 높이가 높으면 빗물이 바로 북쪽, 남쪽, 동쪽, 서쪽으로 이웃 셀로 흐를 수 있습니다. 보다 작거나 같음 현재 셀의 높이는 바다에 인접한 모든 셀에서 바다로 흐를 수 있습니다.
반품 에이 2D 목록 그리드 좌표 결과
어디 결과[i] = [r i , c i ]
빗물이 세포에서 흐를 수 있음을 나타냅니다. (리 나는 , 씨 나는 )
에게 둘 다 태평양과 대서양.
예시 1:
입력: 높이 = [[1,2,2,3,5],[3,2,3,4,4],[2,4,5,3,1],[6,7,1,4,5] ,[5,1,1,2,4]] 산출: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]] 설명: 다음 셀은 아래와 같이 태평양과 대서양으로 흐를 수 있습니다. [0,4]: [0,4] -> 태평양 [0,4] -> 대서양 [1,3]: [1,3 ] -> [0,3] -> 태평양 [1,3] -> [1,4] -> 대서양 [1,4]: [1,4] -> [1,3] -> [0 ,3] -> 태평양 [1,4] -> 대서양 [2,2]: [2,2] -> [1,2] -> [0,2] -> 태평양 [2,2] -> [2,3] -> [2,4] -> 대서양 [3,0]: [3,0] -> 태평양 [3,0] -> [4,0] -> 대서양 [ 3,1]: [3,1] -> [3,0] -> 태평양 [3,1] -> [4,1] -> 대서양 [4,0]: [4,0] -> 태평양 [4,0] -> 대서양 이러한 세포가 태평양과 대서양으로 흘러갈 수 있는 다른 경로가 있다는 점에 유의하십시오.
예 2:
입력: 높이 = [[1]] 산출: [[0,0]] 설명: 물은 유일한 세포에서 태평양과 대서양으로 흐를 수 있습니다.
제약:
m == 높이.길이
n == 높이[r].길이
1 <= m, n <= 200
0 <= 높이[r][c] <= 10 5
파이썬
# 시간 복잡도: O(m*n) # 공간 복잡도: O(m*n) from collections import deque from looking import List 클래스 솔루션: def pacificAtlantic(self, heights: List[List[int]]) -> List[ List[int]]: ROW = len(heights) COL = len(heights[0]) ROW가 아니거나 COL이 아닌 경우: return [] 방향 = [(1, 0), (-1, 0), (0, 1), (0, -1)] pacificQueue = deque() atlanticQueue = deque() for i in range(ROW): pacificQueue.append((i, 0)) atlanticQueue.append((i, COL - 1)) for i in range(COL): pacificQueue.append((0, i)) atlanticQueue.append((ROW - 1, i)) def bfs(queue):reachable = set() while queue: currX, currY = queue. popleft()reachable.add((currX, currY)) for (dX, dY) 방향: nextX = currX + dX nextY = currY + dY if nextX < 0 또는 nextX >= ROW 또는 nextY < 0 또는 nextY >= COL : (nextX, nextY)가 도달 가능한 경우 계속: heights[currX][currY] > heights[nextX][nextY]인 경우 계속: queue.append((nextX, nextY)) 도달 가능한 반환 pacificSet = bfs(pacificQueue) atlanticSet = bfs(atlanticQueue) 반환 목록(pacificSet.intersection(atlanticSet)) 높이 = [[1, 1], [1, 1], [1, 1]] print(Solution().pacificAtlantic(heights))