Leetcode - Word Ladder II

My code:

public class Solution {
    private class wordNode {
        String s;
        int step;
        wordNode pre;
        wordNode(String s, int step, wordNode pre) {
            this.s = s;
            this.step = step;
            this.pre = pre;
        }
    }
    
    public List<List<String>> findLadders(String beginWord, String endWord, Set<String> wordList) {
        List<List<String>> ret = new ArrayList<List<String>>();
        Queue<wordNode> q = new LinkedList<wordNode>();
        q.offer(new wordNode(beginWord, 1, null));
        Set<String> visited = new HashSet<String>();
        Set<String> unvisited = wordList;
        unvisited.add(endWord);
        int prevStep = 0;
        int minStep = 0;
        while (!q.isEmpty()) {
            wordNode node = q.poll();
            int currStep = node.step;
            if (node.s.equals(endWord)) {
                if (minStep == 0) {
                    minStep = currStep;
                }
                if (currStep == minStep) {
                    List<String> path = new ArrayList<String>();
                    while (node != null) {
                        path.add(0, node.s);
                        node = node.pre;
                    }
                    ret.add(path);
                }
                continue;
            }
            if (prevStep < currStep) {
                unvisited.removeAll(visited);
            }
            prevStep = currStep;
            char[] arr = node.s.toCharArray();
            for (int i = 0; i < arr.length; i++) {
                for (char c = 'a'; c <= 'z'; c++) {
                    char temp = arr[i];
                    arr[i] = c;
                    String newWord = String.valueOf(arr);
                    if (unvisited.contains(newWord)) {
                        q.offer(new wordNode(newWord, currStep + 1, node));
                        visited.add(newWord);
                    }
                    arr[i] = temp;
                }
            }
            
        }
        return ret;
    }
}

reference:
http://www.programcreek.com/2014/06/leetcode-word-ladder-ii-java/

Leetcode 最經(jīng)典的一道題目险胰,就這樣被我糟蹋了递瑰。。

和 I 相比没宾,有三個(gè)變化蒜埋。
為了追蹤淫痰。每個(gè) wordNode 結(jié)點(diǎn)有一個(gè) pre 指針,指向他的上一個(gè)結(jié)點(diǎn)整份。

minStep 用來保證待错,step最小的時(shí)候,才能把string插入 ret 中

I 中烈评,當(dāng)我發(fā)現(xiàn)一個(gè)string contained in set,就會(huì)把這個(gè)string從set中刪去朗鸠,因?yàn)槲覀冎恍枰业揭粋€(gè)最優(yōu)解。為了加快速度础倍,就把他刪了烛占。這樣其他排在后面的最優(yōu)解,就不能繼續(xù)遍歷下去了沟启。
但是這道題忆家,我們要找到所有解。所以德迹,只有當(dāng) 當(dāng)前 step全部遍歷完后芽卿,才能把他們用到的string全部刪除了。那如果以后其他的string需要用到他們呢胳搞?
這個(gè)時(shí)候卸例,這些string的step已經(jīng)不是最小了。

Anyway, Good luck, Richardo! -- 09/27/2016

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肌毅,一起剝皮案震驚了整個(gè)濱河市筷转,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌悬而,老刑警劉巖呜舒,帶你破解...
    沈念sama閱讀 211,817評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異笨奠,居然都是意外死亡袭蝗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門般婆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來到腥,“玉大人,你說我怎么就攤上這事蔚袍∠绶叮” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)篓足。 經(jīng)常有香客問我,道長(zhǎng)闰蚕,這世上最難降的妖魔是什么栈拖? 我笑而不...
    開封第一講書人閱讀 56,498評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮没陡,結(jié)果婚禮上涩哟,老公的妹妹穿的比我還像新娘。我一直安慰自己盼玄,他們只是感情好贴彼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著埃儿,像睡著了一般器仗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上童番,一...
    開封第一講書人閱讀 49,829評(píng)論 1 290
  • 那天精钮,我揣著相機(jī)與錄音,去河邊找鬼剃斧。 笑死轨香,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的幼东。 我是一名探鬼主播臂容,決...
    沈念sama閱讀 38,979評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼根蟹!你這毒婦竟也來了脓杉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤简逮,失蹤者是張志新(化名)和其女友劉穎丽已,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體买决,經(jīng)...
    沈念sama閱讀 44,189評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡沛婴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了督赤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘁灯。...
    茶點(diǎn)故事閱讀 38,654評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖躲舌,靈堂內(nèi)的尸體忽然破棺而出丑婿,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布羹奉,位于F島的核電站秒旋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏诀拭。R本人自食惡果不足惜迁筛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望耕挨。 院中可真熱鬧细卧,春花似錦、人聲如沸筒占。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翰苫。三九已至止邮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間奏窑,已是汗流浹背农尖。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留良哲,地道東北人盛卡。 一個(gè)月前我還...
    沈念sama閱讀 46,382評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像筑凫,于是被迫代替她去往敵國和親滑沧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)巍实。 張土汪:刷leetcod...
    土汪閱讀 12,738評(píng)論 0 33
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會(huì)員)滓技,僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,738評(píng)論 2 36
  • B樹的定義 一棵m階的B樹滿足下列條件: 樹中每個(gè)結(jié)點(diǎn)至多有m個(gè)孩子棚潦。 除根結(jié)點(diǎn)和葉子結(jié)點(diǎn)外令漂,其它每個(gè)結(jié)點(diǎn)至少有m...
    文檔隨手記閱讀 13,199評(píng)論 0 25
  • 做出這個(gè)決定,有些猶豫和艱難丸边。直到有人跟我說: 為什麼不寫點(diǎn)兒什麼叠必?直到看到木木已先於我開始寫作,直到發(fā)現(xiàn)在這...
    紫色茜茜閱讀 322評(píng)論 3 0
  • 一講到讀書筆記 ↓↓↓ 抄錄上許多字 最后依舊得不到重點(diǎn) 講不清道道 邊看書 邊畫圖 思維整理能力在這考察 感覺自...
    落瀟瀟落閱讀 338評(píng)論 4 1