摘要:但是這種要遍歷所有的情況,哪怕是已經(jīng)超過(guò)最小操作次數(shù)的情況,導(dǎo)致代碼超時(shí)。其實(shí)從另一個(gè)角度來(lái)說(shuō),這道題可以看做是廣度優(yōu)先算法的一個(gè)展示。按上文中的題目為例,可以將廣度優(yōu)先算法寫(xiě)成以下形式。
題目要求
Given two words (beginWord and endWord), and a dictionary"s word list, find the length of shortest transformation sequence from beginWord to endWord, such that: Only one letter can be changed at a time. Each transformed word must exist in the word list. Note that beginWord is not a transformed word. For example, Given: beginWord = "hit" endWord = "cog" wordList = ["hot","dot","dog","lot","log","cog"] As one shortest transformation is "hit" -> "hot" -> "dot" -> "dog" -> "cog", return its length 5. Note: Return 0 if there is no such transformation sequence. All words have the same length. All words contain only lowercase alphabetic characters. You may assume no duplicates in the word list. You may assume beginWord and endWord are non-empty and are not the same.
假設(shè)輸入兩個(gè)單詞beginWord,endWord以及一個(gè)字典。每一次操作只能對(duì)當(dāng)前單詞修改一個(gè)字符成為字典中的一個(gè)單詞。問(wèn)至少需要多少次操作可以將beginWord轉(zhuǎn)化為endWord。如果不可轉(zhuǎn)換則返回0。
思路與代碼其實(shí)如果從遞歸的角度來(lái)看,并非不可以實(shí)現(xiàn)。每一種普遍情況也就是將當(dāng)前單詞修改一個(gè)字符成為當(dāng)前字典中的一個(gè)單詞。但是這種要遍歷所有的情況,哪怕是已經(jīng)超過(guò)最小操作次數(shù)的情況,導(dǎo)致代碼超時(shí)。其實(shí)從另一個(gè)角度來(lái)說(shuō),這道題可以看做是廣度優(yōu)先算法的一個(gè)展示。
按上文中的題目為例,可以將廣度優(yōu)先算法寫(xiě)成以下形式。
hit / hot / dot lot / / dog log / / cog cog
也就是說(shuō),將每一層上可以生成的單詞全部列出來(lái),然后再逐層遍歷,一旦出現(xiàn)一個(gè)單詞等于endWord,那么遍歷終止,將當(dāng)前遍歷的次數(shù)返回。這里要注意的是,需要將已經(jīng)遍歷的單詞記錄下來(lái),從而不會(huì)發(fā)生重復(fù)的情況。
代碼//和字典中單詞比較是否可以轉(zhuǎn)換 public boolean canTransform(String word1, String word2){ for(int i = 0, count=0 ; i1) return false; } return true; } public int ladderLength(String beginWord, String endWord, List wordList){ Queue q = new LinkedList (); q.add(beginWord); int steps = 0; while(!q.isEmpty()){ int size = q.size(); for(int i = 0 ;i iterator = wordList.iterator() ; iterator.hasNext();){ String current = iterator.next(); if(canTransform(current, temp)){ iterator.remove(); q.offer(current); } } } steps++; } return 0; }
想要了解更多開(kāi)發(fā)技術(shù),面試教程以及互聯(lián)網(wǎng)公司內(nèi)推,歡迎關(guān)注我的微信公眾號(hào)!將會(huì)不定期的發(fā)放福利哦~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67597.html
摘要:題目要求相比于,要求返回所有的最短路徑。至于如何生成該有向圖,則需要通過(guò)廣度優(yōu)先算法,利用隊(duì)列來(lái)實(shí)現(xiàn)。將每一層的分別入棧。如果遇到則至該層結(jié)尾廣度優(yōu)先算法結(jié)束。通過(guò)這種方式來(lái)防止形成圈。 題目要求 Given two words (beginWord and endWord), and a dictionarys word list, find all shortest transfo...
摘要:另外,為了避免產(chǎn)生環(huán)路和重復(fù)計(jì)算,我們找到一個(gè)存在于字典的新的詞時(shí),就要把它從字典中移去。代碼用來(lái)記錄跳數(shù)控制來(lái)確保一次循環(huán)只計(jì)算同一層的節(jié)點(diǎn),有點(diǎn)像二叉樹(shù)遍歷循環(huán)這個(gè)詞從第一位字母到最后一位字母循環(huán)這一位被替換成個(gè)其他字母的情況 Word Ladder Given two words (beginWord and endWord), and a dictionary, find t...
摘要:使用,利用其按層次操作的性質(zhì),可以得到最優(yōu)解。這樣可以保證這一層被完全遍歷。每次循環(huán)取出的元素存為新的字符串。一旦找到和相同的字符串,就返回轉(zhuǎn)換序列長(zhǎng)度操作層數(shù),即。 Problem Given two words (start and end), and a dictionary, find the length of shortest transformation sequence...
摘要:存放過(guò)程中的所有集合為所有的結(jié)尾,則順序存放這個(gè)結(jié)尾對(duì)應(yīng)的中的所有存放同一個(gè)循環(huán)的新加入的,在下一個(gè)循環(huán)再依次對(duì)其中元素進(jìn)行進(jìn)一步的把首個(gè)字符串放入新,再將放入,并將鍵值對(duì)放入,進(jìn)行初始化 Problem Given two words (start and end), and a dictionary, find all shortest transformation sequenc...
摘要:題目解答主要解題思路的,把每一種可能的都放進(jìn)去試,看能不能有一條線邊到代碼當(dāng)然,這樣的時(shí)間還不是最優(yōu)化的,如果我們從兩頭掃,掃到中間任何一個(gè)能夠串聯(lián)起來(lái)都可以,如果沒(méi)有找到可以串聯(lián)的那么返回。 題目:Given two words (beginWord and endWord), and a dictionarys word list, find the length of short...
閱讀 2411·2021-11-16 11:44
閱讀 848·2021-09-10 11:16
閱讀 2224·2019-08-30 15:54
閱讀 1042·2019-08-30 15:53
閱讀 1894·2019-08-30 13:00
閱讀 615·2019-08-29 17:07
閱讀 3509·2019-08-29 16:39
閱讀 3135·2019-08-29 13:30