126. 单词接龙 II
126. 单词接龙 II
方法:广度优先遍历、深度优先遍历(回溯)
class Solution {
public List<List<String>> findLadders(String beginWord, String endWord, List<String> wordList) {
List<List<String>> res = new ArrayList<>();
// 因为需要快速判断扩展出的单词是否在 wordList 里,因此需要将 wordList 存入哈希表,这里命名为「字典」
Set<String> dict = new HashSet<>(wordList);
//特殊用例判断
if (!dict.contains(endWord)) {
return res;
}
//因为从beginWord开始扩展,因此dict里一定不可以有beginWord
dict.remove(beginWord);
//第1步:广度优先遍历构建图
//为了避免记录不需要的边,我们需要记录扩展出的单词是在第几次扩展的时候得到的,key:单词,value:在广度优先遍历的第几层
//steps 记录了已经访问过的word集合,同时记录了在第几层访问到
Map<String, Integer> steps = new HashMap<>();
steps.put(beginWord, 0);