From e8d0fedface55a63125f611d0c03d696d3b38ea2 Mon Sep 17 00:00:00 2001 From: 0xff-dev Date: Sun, 5 Oct 2025 21:26:02 +0800 Subject: [PATCH] Add solution and test-cases for problem 212 --- leetcode/201-300/0212.Word-Search-II/1.jpg | Bin 0 -> 13870 bytes leetcode/201-300/0212.Word-Search-II/2.jpg | Bin 0 -> 3792 bytes .../201-300/0212.Word-Search-II/README.md | 27 ++++--- .../201-300/0212.Word-Search-II/Solution.go | 66 +++++++++++++++++- .../0212.Word-Search-II/Solution_test.go | 27 ++++--- 5 files changed, 94 insertions(+), 26 deletions(-) create mode 100644 leetcode/201-300/0212.Word-Search-II/1.jpg create mode 100644 leetcode/201-300/0212.Word-Search-II/2.jpg diff --git a/leetcode/201-300/0212.Word-Search-II/1.jpg b/leetcode/201-300/0212.Word-Search-II/1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f569294f8e008b212e089d237c0c197e09efb4c GIT binary patch literal 13870 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 D@*%eI literal 0 HcmV?d00001 diff --git a/leetcode/201-300/0212.Word-Search-II/README.md b/leetcode/201-300/0212.Word-Search-II/README.md index 66a401852..c156c11fe 100644 --- a/leetcode/201-300/0212.Word-Search-II/README.md +++ b/leetcode/201-300/0212.Word-Search-II/README.md @@ -1,28 +1,27 @@ # [212.Word Search II][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 +Given an `m x n` `board` of characters and a list of strings `words`, return all words on the board. + +Each word must be constructed from letters of sequentially **adjacent cells**, where adjacent cells are horizontally or vertically neighboring. The same letter cell may not be used more than once in a word. + +**Example 1:** -**Example 1:** +![1](./1.jpg) ``` -Input: a = "11", b = "1" -Output: "100" +Input: board = [["o","a","a","n"],["e","t","a","e"],["i","h","k","r"],["i","f","l","v"]], words = ["oath","pea","eat","rain"] +Output: ["eat","oath"] ``` -## 题意 -> ... +**Example 2:** -## 题解 +![2](./2.jpg) -### 思路1 -> ... -Word Search II -```go ``` - +Input: board = [["a","b"],["c","d"]], words = ["abcb"] +Output: [] +``` ## 结语 diff --git a/leetcode/201-300/0212.Word-Search-II/Solution.go b/leetcode/201-300/0212.Word-Search-II/Solution.go index d115ccf5e..dee4bb22a 100644 --- a/leetcode/201-300/0212.Word-Search-II/Solution.go +++ b/leetcode/201-300/0212.Word-Search-II/Solution.go @@ -1,5 +1,67 @@ package Solution -func Solution(x bool) bool { - return x +type trieNode212 struct { + child [26]*trieNode212 + word string +} + +func buildTrieNode212(words []string) *trieNode212 { + root := &trieNode212{} + for _, word := range words { + walker := root + // a, b + for i, b := range word { + index := b - 'a' + if walker.child[index] == nil { + walker.child[index] = &trieNode212{} + } + walker = walker.child[index] + if i == len(word)-1 { + walker.word = word + } + } + } + return root +} +func Solution(board [][]byte, words []string) []string { + rows, cols := len(board), len(board[0]) + tree := buildTrieNode212(words) + var ( + search func(int, int, *trieNode212) + dirs = [][]int{ + {0, 1}, {0, -1}, {1, 0}, {-1, 0}, + } + ) + found := map[string]struct{}{} + search = func(x, y int, tree *trieNode212) { + if x < 0 || x >= rows || y < 0 || y >= cols || board[x][y] == '|' { + return + } + index := board[x][y] - 'a' + node := tree.child[index] + if node == nil { + return + } + if node.word != "" { + found[node.word] = struct{}{} + } + source := board[x][y] + board[x][y] = '|' + for _, dir := range dirs { + nx, ny := x+dir[0], y+dir[1] + walker := node + search(nx, ny, walker) + } + board[x][y] = source + } + for r := 0; r < rows; r++ { + for c := 0; c < cols; c++ { + search(r, c, tree) + } + } + var ret []string + for key := range found { + ret = append(ret, key) + } + return ret } diff --git a/leetcode/201-300/0212.Word-Search-II/Solution_test.go b/leetcode/201-300/0212.Word-Search-II/Solution_test.go index 14ff50eb4..d9e83acd8 100644 --- a/leetcode/201-300/0212.Word-Search-II/Solution_test.go +++ b/leetcode/201-300/0212.Word-Search-II/Solution_test.go @@ -10,30 +10,37 @@ func TestSolution(t *testing.T) { // 测试用例 cases := []struct { name string - inputs bool - expect bool + board [][]byte + words []string + expect []string }{ - {"TestCase", true, true}, - {"TestCase", true, true}, - {"TestCase", false, false}, + {"TestCase1", [][]byte{ + {'o', 'a', 'a', 'n'}, + {'e', 't', 'a', 'e'}, + {'i', 'h', 'k', 'r'}, + {'i', 'f', 'l', 'v'}, + }, []string{"oath", "pea", "eat", "rain"}, []string{"oath", "eat"}}, + {"TestCase2", [][]byte{ + {'a', 'b'}, {'c', 'd'}, + }, []string{"abcd"}, nil}, } // 开始测试 for i, c := range cases { t.Run(c.name+" "+strconv.Itoa(i), func(t *testing.T) { - got := Solution(c.inputs) + got := Solution(c.board, c.words) if !reflect.DeepEqual(got, c.expect) { - t.Fatalf("expected: %v, but got: %v, with inputs: %v", - c.expect, got, c.inputs) + t.Fatalf("expected: %v, but got: %v, with inputs: %v %v", + c.expect, got, c.board, c.words) } }) } } -// 压力测试 +// 压力测试 func BenchmarkSolution(b *testing.B) { } -// 使用案列 +// 使用案列 func ExampleSolution() { }