Word Search II 460s

 1 public class Solution {
 2     public List<String> findWords(char[][] board, String[] words) {
 3         Trie trie = new Trie();
 4         for (String word : words) {
 5             trie.add(word);
 6         }
 7
 8         List<String> res = new ArrayList<String>();
 9         for (int i = 0; i < board.length; i++) {
10             for (int j = 0; j < board[0].length; j++) {
11                 trie.reset();
12                 search(res, board, "", i, j, trie);
13             }
14         }
15         return res;
16     }
17
18     private void search(List<String> res, char[][] board, String s, int x, int y, Trie trie) {
19         if (x >= board.length || y >= board[0].length || x < 0 || y < 0) {
20             return;
21         }
22         char c = board[x][y];
23         if (c == ‘0‘) {
24             return;
25         }
26         int searchRes = trie.search(c);
27         Node current = trie.getCurrent();
28         s += c;
29         if (searchRes == 0) {
30             return;
31         } else if (searchRes == 1) {
32             current.flag = false;
33             res.add(s);
34         }
35         board[x][y] = ‘0‘;
36         search(res, board, s, x + 1, y, trie);
37         trie.reset(current);
38         search(res, board, s, x - 1, y, trie);
39         trie.reset(current);
40         search(res, board, s, x, y + 1, trie);
41         trie.reset(current);
42         search(res, board, s, x, y - 1, trie);
43         board[x][y] = c;
44     }
45
46     private static class Trie{
47         Node root = new Node();
48         Node current = root;
49
50         public void add(String s) {
51             Node n = root;
52             for (int i = 0; i < s.length(); i++) {
53                 int index = s.charAt(i) - 97;
54                 if (n.nodes[index] == null) {
55                     n.nodes[index] = new Node();
56                 }
57                 n = n.nodes[index];
58             }
59             n.flag = true;
60         }
61
62         public int search(char c) {
63             int index = c - 97;
64             if (current.nodes[index] == null) {
65                 return 0;
66             }
67             current = current.nodes[index];
68             if (current.flag) {
69                 return 1;
70             } else {
71                 return 2;
72             }
73         }
74
75         public Node getCurrent() {
76             return current;
77         }
78
79         public void reset() {
80             current = root;
81         }
82
83         public void reset(Node c) {
84             current = c;
85         }
86     }
87
88     private static class Node{
89         boolean flag;
90         Node[] nodes = new Node[26];
91     }
92 }
时间: 2024-10-19 15:54:01

Word Search II 460s的相关文章

[LeetCode] Word Search II

A simple combination of Implement Trie (Prefix Tree) and Word Search. If you've solved them, this problem will become easy :-) The following code is based on DFS and should be self-explanatory enough. Well, just go ahead and read it. It is long but c

Word Search II

Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same le

leetcode笔记:Word Search II

一. 题目描述 Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The

Java for LeetCode 212 Word Search II

Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same le

【LeetCode】Word Search II 解题报告

[题目] Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The sa

[leedcode 212] Word Search II

Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same le

[LeetCode#212]Word Search II

Problem: Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. Th

[Swift]LeetCode212. 单词搜索 II | Word Search II

Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same le

[leetcode trie]212. Word Search II

Given a 2D board and a list of words from the dictionary, find all words in the board. Each word must be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same le