# Hard-题目48：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 letter cell may not be used more than once in a word.
For example,
Given words = [“oath”,”pea”,”eat”,”rain”] and board =

[
['o','a','a','n'],
['e','t','a','e'],
['i','h','k','r'],
['i','f','l','v']
]

Return [“eat”,”oath”].
Note:
You may assume that all inputs are consist of lowercase letters a-z.

public class Solution {
public List<String> findWords(char[][] board, String[] words) {
List<String> res = new ArrayList<>();
TrieNode root = buildTrie(words);
for(int i = 0; i < board.length; i++) {
for(int j = 0; j < board[0].length; j++) {
dfs(board, i, j, root, res);
}
}
return res;
}

public void dfs(char[][] board, int i, int j, TrieNode p, List<String> res) {
char c = board[i][j];
if(c == '#' || p.next[c - 'a'] == null) return;
p = p.next[c - 'a'];
if(p.word != null) {   // found one
p.word = null;     // de-duplicate
}

board[i][j] = '#';
if(i > 0) dfs(board, i - 1, j ,p, res);
if(j > 0) dfs(board, i, j - 1, p, res);
if(i < board.length - 1) dfs(board, i + 1, j, p, res);
if(j < board[0].length - 1) dfs(board, i, j + 1, p, res);
board[i][j] = c;
}

public TrieNode buildTrie(String[] words) {
TrieNode root = new TrieNode();
for(String w : words) {
TrieNode p = root;
for(char c : w.toCharArray()) {
int i = c - 'a';
if(p.next[i] == null) p.next[i] = new TrieNode();
p = p.next[i];
}
p.word = w;
}
return root;
}

class TrieNode {
TrieNode[] next = new TrieNode[26];
String word;
}
}

19ms,91.42%,21ms，4.36%

• 本文已收录于以下专栏：

## leetcode 212: Word Search II

Word Search II Total Accepted: 423 Total Submissions: 2510 Given a 2D board and a list of words...
• xudli
• 2015年05月20日 06:34
• 6183

## leetcode 212: Word Search II使用前缀树，java实现

• tingting256
• 2015年12月21日 22:06
• 443

## [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 ...
• TstsUgeg
• 2016年06月02日 15:57
• 848

## 【LeetCode】Word Search II 解题报告

【题目】 Given a 2D board and a list of words from the dictionary, find all words in the board. ...
• ljiabin
• 2015年05月19日 16:52
• 13071

## [leetcode] 212. Word Search II 解题报告

• qq508618087
• 2016年03月29日 08:53
• 789

## 212. Word Search II

Given a 2D board and a list of words from the dictionary, find all words in the board. Each word ...
• wdlsjdl2
• 2016年06月25日 21:55
• 115

## 212. Word Search II(Trie)

• u011539372
• 2016年09月23日 17:04
• 104

## leetcode 212. Word Search II

trie + backtracking class Solution { public: vector findWords(vector>& board, vector& words) { Tr...
• shiyang6017
• 2016年09月26日 21:06
• 176

## 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 mu...
• github_34333284
• 2016年04月19日 00:51
• 135

## 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 ...
• liutianjia2014
• 2016年09月03日 00:21
• 107

举报原因： 您举报文章：Hard-题目48：212. Word Search II 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)