一、问题描述:
Given:
start ="hit"
end = "cog"
dict = ["hot","dot","dog","lot","log"]
As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog"
,return its length 5
.
二、实际上这里是广度优先搜索,需要记录遍历的层数,因此需要记录已经访问过的节点,这里使用set进行标记。
1、我们可以另外使用一个set来进行标记,也就是将访问过的节点放到一个set当中,在[1]当中作者利用了传入的参数set,但是对set进行了修改(当访问了一个word之后,将其从set当中删除,当再次遇到这个节点的时候由于它已经不在字典当中,所以无需再次访问)。由于对传入的数据进行了修改,我觉得第二种方法是不好的。
2、如何记录每一层,可以使用类似 当中的方法,在每一层进行遍历之前,首先检查queue当中的节点的个数size,如果在这一层只需从队列当中出列size个元素即可,剩下的元素实际上是下一层的元素,需要在下一层当中进行访问。
我的代码如下:
1 import java.util.*; 2 3 public class Solution { 4 public int ladderLength(String beginWord, String endWord, SetwordDict) { 5 Set set = new HashSet (); 6 Queue queue=new LinkedList (); 7 queue.add(beginWord); 8 set.add(beginWord); 9 int level=1;10 while(!queue.isEmpty()){11 level++;12 int size = queue.size();13 for(int ii=0;ii