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

[学C/C++] 关于word ladder这道题目, 请教for loop

全局:

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

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

x
https://leetcode.com/problems/word-ladder/

以下是我的解法, 然而用comment掉的那句for (int i=0; i<q.size(); i++) 结果就不对了, 用for (int size = q.size(); size > 0; size--) 就对, 我打印了一下计数值并没什么区别, 哪位大神能告诉我一下这是为什么呀。。。已经被整懵了... thanks!

class Solution {
public:
    int ladderLength(string beginWord, string endWord, vector<string>& wordList) {
        unordered_set<string> dict(wordList.begin(), wordList.end());
        if (!dict.count(endWord))
        {
            return 0;
        }

        queue<string> q;
        q.push(beginWord);

        int len=beginWord.length();
        int step=0;
        int count=0;

        while (!q.empty())
        {
            step++;
           //for (int i=0; i<q.size(); i++) //incorrect
           for (int size = q.size(); size > 0; size--)   //correct
            {
                string w=q.front();
                q.pop();
               count++;
               cout<<"count:"<<count<<endl;

                for (int j=0; j<len; j++)
                {
                    char ch=w[j];
                    for (int k='a'; k<='z'; k++)
                    {
                        w[j]=k;
                        if (w==endWord)
                        {
                            return step+1;
                        }
                        if (!dict.count(w))
                        {
                            continue;
                        }
                        dict.erase(w);
                        q.push(w);
                    }
                    w[j]=ch;
                }

            }
        } //end of while

        return 0;
    }
};

-------
input:

"hit"
"cog"
["hot","dot","dog","lot","log","cog"]

output:4
expected: 5

stdout:count:1
count:2
count:3
count:4
count:5


上一篇:想问下可以用R语言刷LeetCode吗
下一篇:lc崩了吗
🔗
hoooga 2020-6-28 16:14:22 | 只看该作者
全局:
for loop里面,queue执行了push操作,queue的size在变。
回复

使用道具 举报

🔗
david_smith 2020-6-28 22:17:44 | 只看该作者
全局:
我做BSF的时候,我喜欢把level/step 也放进queue里,

queue<pair<T, integer>> q;  T 在这道题里面就是String, Integer是level/step

如果这样做了以后,就不需要nested for loop.

  1. Pair current = q.poll();
  2. q.push(new Pair(next(current.first), current.second + 1));
复制代码

这样写的话,代码会简洁一些
回复

使用道具 举报

🔗
 楼主| fasionfans 2020-6-28 23:24:40 | 只看该作者
全局:
hoooga 发表于 2020-6-28 16:14
for loop里面,queue执行了push操作,queue的size在变。

Got it, thanks!
回复

使用道具 举报

🔗
 楼主| fasionfans 2020-6-28 23:24:56 | 只看该作者
全局:
david_smith 发表于 2020-6-28 22:17
我做BSF的时候,我喜欢把level/step 也放进queue里,

queue q;  T 在这道题里面就是String, Integer是l ...

This is a good solution, thanks for sharing!
回复

使用道具 举报

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

本版积分规则

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