Skip to content

Commit ac77742

Browse files
committed
feat: add golang solution to lc problem: No.0417
No.0417.Pacific Atlantic Water Flow
1 parent d89a423 commit ac77742

File tree

3 files changed

+151
-0
lines changed

3 files changed

+151
-0
lines changed

solution/0400-0499/0417.Pacific Atlantic Water Flow/README.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,58 @@ public:
231231
};
232232
```
233233

234+
### **Go**
235+
236+
```go
237+
func pacificAtlantic(heights [][]int) [][]int {
238+
m, n := len(heights), len(heights[0])
239+
vis1 := make(map[int]bool)
240+
vis2 := make(map[int]bool)
241+
var q1 [][]int
242+
var q2 [][]int
243+
for i := 0; i < m; i++ {
244+
for j := 0; j < n; j++ {
245+
if i == 0 || j == 0 {
246+
vis1[i*n+j] = true
247+
q1 = append(q1, []int{i, j})
248+
}
249+
if i == m-1 || j == n-1 {
250+
vis2[i*n+j] = true
251+
q2 = append(q2, []int{i, j})
252+
}
253+
}
254+
}
255+
dirs := []int{-1, 0, 1, 0, -1}
256+
bfs := func(q [][]int, vis map[int]bool) {
257+
for len(q) > 0 {
258+
for k := len(q); k > 0; k-- {
259+
p := q[0]
260+
q = q[1:]
261+
for i := 0; i < 4; i++ {
262+
x, y := p[0]+dirs[i], p[1]+dirs[i+1]
263+
if x >= 0 && x < m && y >= 0 && y < n && !vis[x*n+y] && heights[x][y] >= heights[p[0]][p[1]] {
264+
vis[x*n+y] = true
265+
q = append(q, []int{x, y})
266+
}
267+
}
268+
}
269+
}
270+
}
271+
bfs(q1, vis1)
272+
bfs(q2, vis2)
273+
var ans [][]int
274+
for i := 0; i < m; i++ {
275+
for j := 0; j < n; j++ {
276+
x := i*n + j
277+
if vis1[x] && vis2[x] {
278+
ans = append(ans, []int{i, j})
279+
}
280+
}
281+
}
282+
return ans
283+
}
284+
```
285+
234286
### **...**
235287

236288
```

solution/0400-0499/0417.Pacific Atlantic Water Flow/README_EN.md

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,6 +213,58 @@ public:
213213
};
214214
```
215215

216+
### **Go**
217+
218+
```go
219+
func pacificAtlantic(heights [][]int) [][]int {
220+
m, n := len(heights), len(heights[0])
221+
vis1 := make(map[int]bool)
222+
vis2 := make(map[int]bool)
223+
var q1 [][]int
224+
var q2 [][]int
225+
for i := 0; i < m; i++ {
226+
for j := 0; j < n; j++ {
227+
if i == 0 || j == 0 {
228+
vis1[i*n+j] = true
229+
q1 = append(q1, []int{i, j})
230+
}
231+
if i == m-1 || j == n-1 {
232+
vis2[i*n+j] = true
233+
q2 = append(q2, []int{i, j})
234+
}
235+
}
236+
}
237+
dirs := []int{-1, 0, 1, 0, -1}
238+
bfs := func(q [][]int, vis map[int]bool) {
239+
for len(q) > 0 {
240+
for k := len(q); k > 0; k-- {
241+
p := q[0]
242+
q = q[1:]
243+
for i := 0; i < 4; i++ {
244+
x, y := p[0]+dirs[i], p[1]+dirs[i+1]
245+
if x >= 0 && x < m && y >= 0 && y < n && !vis[x*n+y] && heights[x][y] >= heights[p[0]][p[1]] {
246+
vis[x*n+y] = true
247+
q = append(q, []int{x, y})
248+
}
249+
}
250+
}
251+
}
252+
}
253+
bfs(q1, vis1)
254+
bfs(q2, vis2)
255+
var ans [][]int
256+
for i := 0; i < m; i++ {
257+
for j := 0; j < n; j++ {
258+
x := i*n + j
259+
if vis1[x] && vis2[x] {
260+
ans = append(ans, []int{i, j})
261+
}
262+
}
263+
}
264+
return ans
265+
}
266+
```
267+
216268
### **...**
217269

218270
```
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
func pacificAtlantic(heights [][]int) [][]int {
2+
m, n := len(heights), len(heights[0])
3+
vis1 := make(map[int]bool)
4+
vis2 := make(map[int]bool)
5+
var q1 [][]int
6+
var q2 [][]int
7+
for i := 0; i < m; i++ {
8+
for j := 0; j < n; j++ {
9+
if i == 0 || j == 0 {
10+
vis1[i*n+j] = true
11+
q1 = append(q1, []int{i, j})
12+
}
13+
if i == m-1 || j == n-1 {
14+
vis2[i*n+j] = true
15+
q2 = append(q2, []int{i, j})
16+
}
17+
}
18+
}
19+
dirs := []int{-1, 0, 1, 0, -1}
20+
bfs := func(q [][]int, vis map[int]bool) {
21+
for len(q) > 0 {
22+
for k := len(q); k > 0; k-- {
23+
p := q[0]
24+
q = q[1:]
25+
for i := 0; i < 4; i++ {
26+
x, y := p[0]+dirs[i], p[1]+dirs[i+1]
27+
if x >= 0 && x < m && y >= 0 && y < n && !vis[x*n+y] && heights[x][y] >= heights[p[0]][p[1]] {
28+
vis[x*n+y] = true
29+
q = append(q, []int{x, y})
30+
}
31+
}
32+
}
33+
}
34+
}
35+
bfs(q1, vis1)
36+
bfs(q2, vis2)
37+
var ans [][]int
38+
for i := 0; i < m; i++ {
39+
for j := 0; j < n; j++ {
40+
x := i*n + j
41+
if vis1[x] && vis2[x] {
42+
ans = append(ans, []int{i, j})
43+
}
44+
}
45+
}
46+
return ans
47+
}

0 commit comments

Comments
 (0)