From 806408ae9817196c30a933ba0f35e9a3a2c78b77 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Fri, 2 May 2025 16:53:40 +0800 Subject: [PATCH] Add solution and test-cases for problem 417 --- .../0417.Pacific-Atlantic-Water-Flow/1.jpg | Bin 0 -> 45313 bytes .../README.md | 48 +++++++---- .../Solution.go | 75 +++++++++++++++++- .../Solution_test.go | 17 ++-- 4 files changed, 116 insertions(+), 24 deletions(-) create mode 100644 leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/1.jpg diff --git a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/1.jpg b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..825101273940838f795a3e72f93af97cfed7cd21 GIT binary patch literal 45313 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 literal 0 HcmV?d00001 diff --git a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/README.md b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/README.md index 9d7eb01c3..edb225691 100644 --- a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/README.md +++ b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/README.md @@ -1,28 +1,46 @@ # [417.Pacific Atlantic Water Flow][title] -> [!WARNING|style:flat] -> This question is temporarily unanswered if you have good ideas. Welcome to [Create Pull Request PR](https://github.com/kylesliu/awesome-golang-algorithm) - ## Description +There is an `m x n` rectangular island that borders both the **Pacific Ocean** and **Atlantic Ocean**. The **Pacific Ocean** touches the island's left and top edges, and the **Atlantic Ocean** touches the island's right and bottom edges. -**Example 1:** +The island is partitioned into a grid of square cells. You are given an `m x n` integer matrix `heights` where `heights[r][c]` represents the **height above sea level** of the cell at coordinate `(r, c)`. -``` -Input: a = "11", b = "1" -Output: "100" -``` +The island receives a lot of rain, and the rain water can flow to neighboring cells directly north, south, east, and west if the neighboring cell's height is **less than or equal to** the current cell's height. Water can flow from any cell adjacent to an ocean into the ocean. + +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 Pacific and Atlantic oceans. -## 题意 -> ... +**Example 1:** -## 题解 +![1](./1.jpg) -### 思路1 -> ... -Pacific Atlantic Water Flow -```go ``` +Input: heights = [[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]] +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 oceans, as shown below: +[0,4]: [0,4] -> Pacific Ocean + [0,4] -> Atlantic Ocean +[1,3]: [1,3] -> [0,3] -> Pacific Ocean + [1,3] -> [1,4] -> Atlantic Ocean +[1,4]: [1,4] -> [1,3] -> [0,3] -> Pacific Ocean + [1,4] -> Atlantic Ocean +[2,2]: [2,2] -> [1,2] -> [0,2] -> Pacific Ocean + [2,2] -> [2,3] -> [2,4] -> Atlantic Ocean +[3,0]: [3,0] -> Pacific Ocean + [3,0] -> [4,0] -> Atlantic Ocean +[3,1]: [3,1] -> [3,0] -> Pacific Ocean + [3,1] -> [4,1] -> Atlantic Ocean +[4,0]: [4,0] -> Pacific Ocean + [4,0] -> Atlantic Ocean +Note that there are other possible paths for these cells to flow to the Pacific and Atlantic oceans. +``` + +**Example 2:** +``` +Input: heights = [[1]] +Output: [[0,0]] +Explanation: The water can flow from the only cell to the Pacific and Atlantic oceans. +``` ## 结语 diff --git a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution.go b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution.go index d115ccf5e..49eeaa936 100644 --- a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution.go +++ b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution.go @@ -1,5 +1,76 @@ package Solution -func Solution(x bool) bool { - return x +func Solution(heights [][]int) [][]int { + m, n := len(heights), len(heights[0]) + state := make([][]int, m) + pacific, atlantic := 1, 2 + for i := 0; i < m; i++ { + state[i] = make([]int, n) + } + for i := 0; i < n-1; i++ { + state[0][i] = pacific + state[m-1][i+1] = atlantic + } + for i := 0; i < m-1; i++ { + state[i][0] = pacific + state[i+1][n-1] = atlantic + } + + state[0][n-1] = 3 + state[m-1][0] = 3 + var ( + leftTop func(int, int, int) + rightBottom func(int, int, int) + ) + leftTop = func(x, y, pre int) { + if x < 0 || x >= m || y < 0 || y >= n { + return + } + if pre != -1 && state[x][y]&pacific == pacific { + return + } + if heights[x][y] < pre { + return + } + state[x][y] |= pacific + leftTop(x-1, y, heights[x][y]) + leftTop(x+1, y, heights[x][y]) + leftTop(x, y+1, heights[x][y]) + leftTop(x, y-1, heights[x][y]) + } + rightBottom = func(x, y, pre int) { + if x < 0 || x >= m || y < 0 || y >= n { + return + } + if heights[x][y] < pre { + return + } + if pre != -1 && state[x][y]&atlantic == atlantic { + return + } + state[x][y] |= atlantic + rightBottom(x-1, y, heights[x][y]) + rightBottom(x+1, y, heights[x][y]) + rightBottom(x, y-1, heights[x][y]) + rightBottom(x, y+1, heights[x][y]) + } + + for i := 0; i < n; i++ { + leftTop(0, i, -1) + rightBottom(m-1, i, -1) + } + for i := 0; i < m; i++ { + leftTop(i, 0, -1) + rightBottom(i, n-1, -1) + } + res := make([][]int, 0) + for i := 0; i < m; i++ { + for j := 0; j < n; j++ { + if state[i][j] == 3 { + res = append(res, []int{i, j}) + } + } + } + + return res } diff --git a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution_test.go b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution_test.go index 14ff50eb4..ba5d796c6 100644 --- a/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution_test.go +++ b/leetcode/401-500/0417.Pacific-Atlantic-Water-Flow/Solution_test.go @@ -10,12 +10,15 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + inputs [][]int + expect [][]int }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]int{ + {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}, + }, [][]int{ + {0, 4}, {1, 3}, {1, 4}, {2, 2}, {3, 0}, {3, 1}, {4, 0}, + }}, + {"TestCase2", [][]int{{1}}, [][]int{{0, 0}}}, } // 开始测试 @@ -30,10 +33,10 @@ func TestSolution(t *testing.T) { } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }