mirror of
https://github.com/prdlk/leetcode.git
synced 2026-11-02 13:12:44 +00:00
feat(work): implement Pacific Atlantic Water Flow solution
This commit is contained in:
1 parent
f5f31ba1c3
commit
ae1d1ceede
1 file changed
+48
-14
@@ -24,7 +24,7 @@ Return a 2D list of grid coordinates result where result[i] = [ri,
|
|||||||
ci] denotes that rain water can flow from cell (ri, ci) to both the
|
ci] denotes that rain water can flow from cell (ri, ci) to both the
|
||||||
Pacific and Atlantic oceans.
|
Pacific and Atlantic oceans.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Example 1:
|
Example 1:
|
||||||
|
|
||||||
@@ -33,19 +33,19 @@ Input: heights =
|
|||||||
Output: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]]
|
Output: [[0,4],[1,3],[1,4],[2,2],[3,0],[3,1],[4,0]]
|
||||||
Explanation: The following cells can flow to the Pacific and Atlantic
|
Explanation: The following cells can flow to the Pacific and Atlantic
|
||||||
oceans, as shown below:
|
oceans, as shown below:
|
||||||
[0,4]: [0,4] -> Pacific Ocean
|
[0,4]: [0,4] -> Pacific Ocean
|
||||||
[0,4] -> Atlantic Ocean
|
[0,4] -> Atlantic Ocean
|
||||||
[1,3]: [1,3] -> [0,3] -> Pacific Ocean
|
[1,3]: [1,3] -> [0,3] -> Pacific Ocean
|
||||||
[1,3] -> [1,4] -> Atlantic Ocean
|
[1,3] -> [1,4] -> Atlantic Ocean
|
||||||
[1,4]: [1,4] -> [1,3] -> [0,3] -> Pacific Ocean
|
[1,4]: [1,4] -> [1,3] -> [0,3] -> Pacific Ocean
|
||||||
[1,4] -> Atlantic Ocean
|
[1,4] -> Atlantic Ocean
|
||||||
[2,2]: [2,2] -> [1,2] -> [0,2] -> Pacific Ocean
|
[2,2]: [2,2] -> [1,2] -> [0,2] -> Pacific Ocean
|
||||||
[2,2] -> [2,3] -> [2,4] -> Atlantic Ocean
|
[2,2] -> [2,3] -> [2,4] -> Atlantic Ocean
|
||||||
[3,0]: [3,0] -> Pacific Ocean
|
[3,0]: [3,0] -> Pacific Ocean
|
||||||
[3,0] -> [4,0] -> Atlantic Ocean
|
[3,0] -> [4,0] -> Atlantic Ocean
|
||||||
[3,1]: [3,1] -> [3,0] -> Pacific Ocean
|
[3,1]: [3,1] -> [3,0] -> Pacific Ocean
|
||||||
[3,1] -> [4,1] -> Atlantic Ocean
|
[3,1] -> [4,1] -> Atlantic Ocean
|
||||||
[4,0]: [4,0] -> Pacific Ocean
|
[4,0]: [4,0] -> Pacific Ocean
|
||||||
[4,0] -> Atlantic Ocean
|
[4,0] -> Atlantic Ocean
|
||||||
Note that there are other possible paths for these cells to flow to
|
Note that there are other possible paths for these cells to flow to
|
||||||
the Pacific and Atlantic oceans.
|
the Pacific and Atlantic oceans.
|
||||||
@@ -57,19 +57,53 @@ Output: [[0,0]]
|
|||||||
Explanation: The water can flow from the only cell to the Pacific and
|
Explanation: The water can flow from the only cell to the Pacific and
|
||||||
Atlantic oceans.
|
Atlantic oceans.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Constraints:
|
Constraints:
|
||||||
|
|
||||||
• m == heights.length
|
• m == heights.length
|
||||||
|
|
||||||
• n == heights[r].length
|
• n == heights[r].length
|
||||||
|
|
||||||
• 1 <= m, n <= 200
|
• 1 <= m, n <= 200
|
||||||
|
|
||||||
• 0 <= heights[r][c] <= 10^5
|
• 0 <= heights[r][c] <= 10^5
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
class Solution:
|
class Solution:
|
||||||
def pacificAtlantic(self, heights: list[list[int]]) -> list[list[int]]:
|
def pacificAtlantic(self, heights: list[list[int]]) -> list[list[int]]:
|
||||||
|
rows, cols = len(heights), len(heights[0])
|
||||||
|
pac, atl = set(), set()
|
||||||
|
|
||||||
|
def dfs(r, c, seen, prevHeight):
|
||||||
|
if (
|
||||||
|
(r, c) in seen
|
||||||
|
or r < 0
|
||||||
|
or c < 0
|
||||||
|
or r == rows
|
||||||
|
or c == cols
|
||||||
|
or heights[r][c] < prevHeight
|
||||||
|
):
|
||||||
|
return
|
||||||
|
seen.add((r, c))
|
||||||
|
dfs(r + 1, c, seen, heights[r][c])
|
||||||
|
dfs(r - 1, c, seen, heights[r][c])
|
||||||
|
dfs(r, c + 1, seen, heights[r][c])
|
||||||
|
dfs(r, c - 1, seen, heights[r][c])
|
||||||
|
|
||||||
|
for c in range(cols):
|
||||||
|
dfs(0, c, pac, heights[0][c])
|
||||||
|
dfs(rows - 1, c, atl, heights[rows - 1][c])
|
||||||
|
|
||||||
|
for r in range(rows):
|
||||||
|
dfs(r, 0, pac, heights[r][0])
|
||||||
|
dfs(r, cols - 1, atl, heights[r][cols - 1])
|
||||||
|
|
||||||
|
res = []
|
||||||
|
for r in range(rows):
|
||||||
|
for c in range(cols):
|
||||||
|
if (r, c) in pac and (r, c) in atl:
|
||||||
|
res.append([r, c])
|
||||||
|
|
||||||
|
return res
|
||||||
Reference in new issue
Block a user