LeetCode 126單詞接龍II 官方解法

2021-10-06 22:08:56 字數 1891 閱讀 6469

給定兩個單詞(beginword 和 endword)和乙個字典 wordlist,找出所有從 beginword 到 endword 的最短轉換序列。轉換需遵循如下規則:

每次轉換只能改變乙個字母。

轉換過程中的中間單詞必須是字典中的單詞。

說明:

如果不存在這樣的轉換序列,返回乙個空列表。

所有單詞具有相同的長度。

所有單詞只由小寫字母組成。

字典中不存在重複的單詞。

你可以假設 beginword 和 endword 是非空的,且二者不相同。

示例 1:

輸入:beginword = 「hit」,

endword = 「cog」,

wordlist = [「hot」,「dot」,「dog」,「lot」,「log」,「cog」]

輸出:[

[「hit」,「hot」,「dot」,「dog」,「cog」],

[「hit」,「hot」,「lot」,「log」,「cog」]

]示例 2:

輸入:beginword = 「hit」

endword = 「cog」

wordlist = [「hot」,「dot」,「dog」,「lot」,「log」]

輸出:

解釋: endword 「cog」 不在字典中,所以不存在符合要求的轉換序列。

const

int inf =

1<<20;

class

solution

}//建立word-id(unordered_map)對映以及id-word對映(vector)if(

!wordid.

count

(endword));

}//不存在目標單詞,返回空if(

!wordid.

count

(beginword)

)//新增起始單詞

edges.

resize

(idword.

size()

);//edges[i][j]表示id為i與j的單詞之間有邊(只差乙個字母))

for(

int i =

0; i < idword.

size()

; i++)}

}//建立edges二維矩陣

const

int dest = wordid[endword]

;//dest為目標單詞的id

vector> res;

//變化的單詞路徑

queueint>> q;

//bfs的佇列

vector<

int>

cost

(id, inf)

;//cost[i] 表示 beginword 對應的點到第 i 個點的代價(即轉換次數)。

//初始情況下其所有元素初始化為無窮大。

//所有的單詞耗費初始化為無限遠

q.push

(vector<

int>);

//佇列放入起始單詞

cost[wordid[beginword]]=

0;while

(!q.

empty()

) res.

push_back

(tmp);}

else}}

}return res;

}bool

transformcheck

(const string& str1,

const string& str2)

}return differences ==1;

}};

leetcode官方題解鏈結

leetcode 126 單詞接龍2

給定兩個單詞 beginword 和 endword 和乙個字典 wordlist,找出所有從 beginword 到 endword 的最短轉換序列。轉換需遵循如下規則 每次轉換只能改變乙個字母。轉換過程中的中間單詞必須是字典中的單詞。說明 示例 1 輸入 beginword hit endwor...

Leetcode126單詞接龍II C

思路 參考 中的每一步都按我自己的理解進行注釋了。class solution 存放動態的路徑,這裡不一定是滿足條件的路徑,這樣可以一直去除最後乙個詞進行比較 queue paths 指定路徑的開頭 paths.push p 存放已經迴圈過的單詞。unordered setwords 分別記錄當前路...

126 單詞接龍 II

題目.high 這其實就是圖的演算法,dijkstra演算法 這道題,先求直達的最小路徑,這個用bfs沒啥好說的,一般求路徑的問題就是要用dfs,可是不需要求所有的到達路徑,也不需要求隨意的一條到達路徑,不然dfs準沒錯。所以我們還是要用bfs,不過在bfs的時候,把經過的所有節點都求出從開始到他這...