1
+ class Solution {
2
+ func pacificAtlantic( _ heights: [ [ Int ] ] ) -> [ [ Int ] ] {
3
+ let rows = heights. count
4
+ let cols = heights [ 0 ] . count
5
+ var pac = Set < [ Int ] > ( )
6
+ var atl = Set < [ Int ] > ( )
7
+ var res = [ [ Int] ] ( )
8
+
9
+ func dfs( _ r: Int , _ c: Int , _ visit: inout Set < [ Int ] > , _ prevHeight: Int ) {
10
+ if r < 0 || c < 0 || r == rows || c == cols || visit. contains ( [ r, c] ) || heights [ r] [ c] < prevHeight {
11
+ return
12
+ }
13
+ visit. insert ( [ r, c] )
14
+ dfs ( r + 1 , c, & visit, heights [ r] [ c] )
15
+ dfs ( r - 1 , c, & visit, heights [ r] [ c] )
16
+ dfs ( r, c + 1 , & visit, heights [ r] [ c] )
17
+ dfs ( r, c - 1 , & visit, heights [ r] [ c] )
18
+ }
19
+
20
+ for c in 0 ..< cols {
21
+ dfs ( 0 , c, & pac, heights [ 0 ] [ c] )
22
+ dfs ( rows - 1 , c, & atl, heights [ rows - 1 ] [ c] )
23
+ }
24
+
25
+ for r in 0 ..< rows {
26
+ dfs ( r, 0 , & pac, heights [ r] [ 0 ] )
27
+ dfs ( r, cols - 1 , & atl, heights [ r] [ cols - 1 ] )
28
+ }
29
+
30
+ for r in 0 ..< rows {
31
+ for c in 0 ..< cols {
32
+ if pac. contains ( [ r, c] ) && atl. contains ( [ r, c] ) {
33
+ res. append ( [ r, c] )
34
+ }
35
+ }
36
+ }
37
+
38
+ return res
39
+ }
40
+ }
0 commit comments