📣 VIP通行证夏日特惠 限时立减$68
查看: 1827| 回复: 7
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Java/C#] 刷题问题——问题出在哪里?

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
问题:127. Word Ladder
  1. class Solution {
  2.     public int ladderLength(String beginWord, String endWord, List<String> wordList) {
  3.         Queue<String> q = new LinkedList<>();
  4.         HashSet<String> visited = new HashSet<>();
  5.         HashSet<String> dict = new HashSet<>();
  6.         for(int i = 0; i< wordList.size(); i++){
  7.             dict.add(wordList.get(i));
  8.         }
  9.         int level =1;
  10.         q.add(beginWord);
  11.         visited.add(beginWord);
  12.         while(!q.isEmpty()){
  13.             level++;
  14.             
  15.             for(int j=0; j< q.size(); j++){
  16.                String str = q.poll();
  17.                 for(int k = 0; k<str.length();k++){
  18.                     char [] chars = str.toCharArray();
  19.                     for(char c = 'a'; c <= 'z'; c++){   
  20.                     chars [k] = c;
  21.                     String word = new String(chars);
  22.                     if(word.equals(endWord)&& dict.contains(word)){
  23.                         return level;
  24.                     }
  25.                     if(dict.contains(word) && !visited.contains(word)){
  26.                         q.add(word);
  27.                         visited.add(word);
  28.                         }
  29.                     }
  30.                 }
  31.             }
  32.         }
  33.         return 0;
  34.     }
  35. }
复制代码




------------debug 信息-------------------

beginWord: "hit"
endWord: "cog"
wordList: ["hot","dot","dog","lot","log","cog"]
q: ["dot","lot"]
visited: [lot, hit, dot, hot]
dict: [lot, log, dot, cog, hot, dog]
level: 3
j: 0


beginWord: "hit"
endWord: "cog"
wordList: ["hot","dot","dog","lot","log","cog"]
q: ["lot","dog"]
visited: [lot, hit, dot, hot, dog]
dict: [lot, log, dot, cog, hot, dog]
level: 3
j: 1

beginWord: "hit"
endWord: "cog"
wordList: ["hot","dot","dog","lot","log","cog"]
q: ["lot","dog"]
visited: [lot, hit, dot, hot, dog]
dict: [lot, log, dot, cog, hot, dog]
level: 3

我觉得是["dot", "lot"]这个level上出问题,我觉得我自己陷入一个我自己觉得没问题,但是代码打出来有问题。帮忙点出来我错在哪里?谢谢

上一篇:求湾区一起见面刷面经讨论的小伙伴
下一篇:DDIA神书 &amp;&amp; Elements of Programming Interviews z...
全局:
不明觉厉,可能q.size()吧
回复

使用道具 举报

🔗
duziyuanyang 2019-12-14 09:25:26 | 只看该作者
全局:
for loop之前要把q.size() 记录下来,int size = q.size(). 然后for(int j=0; j < size; j++). 因为你在for loop里还有q.add() operation这样的话q.size()就会一直更新。建议lz刷一下level order traversal, 把bfs模板好好研究一下。
回复

使用道具 举报

🔗
 楼主| Oceanid77 2019-12-14 10:30:13 | 只看该作者
全局:
duziyuanyang 发表于 2019-12-14 09:25
for loop之前要把q.size() 记录下来,int size = q.size(). 然后for(int j=0; j < size; j++). 因为你在for ...

明白了。 没注意到这个细节,谢谢
回复

使用道具 举报

🔗
 楼主| Oceanid77 2019-12-14 10:30:37 | 只看该作者
全局:
swimmingfish96 发表于 2019-12-14 04:10
不明觉厉,可能q.size()吧

你这是委婉给提示么?
回复

使用道具 举报

🔗
sdus007 2019-12-14 12:23:30 | 只看该作者
全局:
在遍历队列过程中增删元素经常会造成错误,可以用iterator遍历
回复

使用道具 举报

🔗
wangdiao01 2019-12-14 14:29:56 | 只看该作者
全局:
养成好习惯,循环跳出条件使用常量,不要用数组长度,可以避免这种问题
回复

使用道具 举报

🔗
 楼主| Oceanid77 2019-12-14 14:34:48 | 只看该作者
全局:
wangdiao01 发表于 2019-12-14 14:29
养成好习惯,循环跳出条件使用常量,不要用数组长度,可以避免这种问题

谢谢提醒
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表