查看: 1332| 回复: 6
跳转到指定楼层
上一主题 下一主题
收起左侧

[Leetcode] 请教 Leetcode 127 题word ladder

全局:

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

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

x
我从前辈那里得到的答案,大概思路理解,在leetcode上也跑通了,代码如下:
  1. class Solution {
  2. public:
  3.     int ladderLength(string beginWord, string endWord, vector<string>& wordList){
  4.     unordered_set<string> dict(wordList.begin(), wordList.end());
  5.     if (!dict.count(endWord)) return 0;
  6.     queue<string> q;
  7.     unordered_map<string, int> words;  //这个单词是通过改第int位的来的
  8.     words[beginWord] = -1;
  9.     q.push(beginWord);
  10.     int l = beginWord.length();
  11.     int step = 0;
  12.     while(!q.empty()) {
  13.       ++step;
  14.       for (int size = q.size(); size>0; size--) { //处理当前这一层所有节点
  15.       //for (int size=0; size<(int)q.size(); size++) {
  16.           cout<<size<<endl;
  17.           string w = q.front();
  18.           q.pop();
  19.           int loc = words[w];
  20.           for (int i=0; i<l; i++) {  
  21.           //对于它的每一位置0~l去修改它,改成a~z全部去试一下
  22.             if(i==loc) continue;
  23.             char ch = w[i];          //先存起来
  24.             for (int j='a'; j<='z'; j++) {
  25.                w[i] = j;
  26.                if (w==endWord)  return step+1;  //找到解了
  27.                if(!dict.count(w)) continue;   //如果字典里没有,跳过
  28.                words[w] = i;   //说明w这个新词是通过改第i位得来的
  29.                dict.erase(w);    //出现过一次就把它删除
  30.                q.push(w);
  31.             }      
  32.             w[i] = ch;  //复位回原单词,这样才可以改第i+1位
  33.           }
  34.      }
  35.    }
  36.       return 0;
  37.    }
  38. };
复制代码

这里我想问的是while里的第一个for loop,也就是处理一层的操作:
for (int size = q.size(); size>0; size--) 就可以通过
但是 for (int size=0; size<(int)q.size(); size++) 却不行
我看了一些循环里面也没有用到size这个变量啊。。。请问原答案里从q.size() 扫到0,而不是从0扫到q.size() 是有什么特别的逻辑考虑吗?

上一篇:一天十题怎么做到的??
下一篇:除了刷题需要补什么知识
全局:
是不是因为q在循环中一直在改变啊,你先用个变量保存q.size(),然后再用你那个语法试试

补充内容 (2020-12-5 16:44):
楼主点了赞也加点大米呀~

评分

参与人数 3大米 +5 收起 理由
不知道小帅 + 1 赞一个
ttxs2016 + 1 给你点个赞!
bryanjhy + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

全局:
楼主点了赞也加点大米呀~
回复

使用道具 举报

🔗
FreshFish 2020-12-5 23:00:54 | 只看该作者
全局:
正如楼上所说 每次循环size会变的.  你可以print q.size()就可以很清楚的看到. 而如果写成 int size = q.size(). 这是初始化给它的值 之后queue再怎么变都和这个变量`size` 没有关系了

评分

参与人数 1大米 +1 收起 理由
ttxs2016 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
 楼主| ttxs2016 2020-12-30 06:45:51 | 只看该作者
全局:
北极兔兔鲨 发表于 2020-12-4 05:29
是不是因为q在循环中一直在改变啊,你先用个变量保存q.size(),然后再用你那个语法试试

补充内容 (2020-12 ...

多谢回复。正在研究如何加大米(Sorry 一度认为点赞和加大米是一回事。。。)
回复

使用道具 举报

🔗
 楼主| ttxs2016 2020-12-30 06:46:14 | 只看该作者
全局:
FreshFish 发表于 2020-12-5 23:00
正如楼上所说 每次循环size会变的.  你可以print q.size()就可以很清楚的看到. 而如果写成 int size = q.si ...

谢谢回复!
回复

使用道具 举报

🔗
北极兔兔鲨 2020-12-31 04:13:03 | 只看该作者
全局:
ttxs2016 发表于 2020-12-30 06:45
多谢回复。正在研究如何加大米(Sorry 一度认为点赞和加大米是一回事。。。)

原来是这样,谢谢你加的大米,抱歉之前误会你了
回复

使用道具 举报

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

本版积分规则

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