[Leetcode] 0417. 태평양 대서양 수류

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))
				
			
ko_KR한국어