5 電話號碼的字母組合(中等 回溯)

2021-10-25 08:35:10 字數 2007 閱讀 2573

給定乙個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。

給出數字到字母的對映如下(與**按鍵相同)。注意 1 不對應任何字母。

示例:

輸入:"23"

輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

說明:儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序。

回溯法
class

solution

: def lettercombinations

(self, digits: str)

-> list[str]:''

'回溯法'

'' dic =

res =

# 存放返回的結果

path =

# 存放路徑的陣列

if not digits:

return

def back_track

(str):if

len(path)

==len

(digits)

: res.(''

.join

(path)

) # ''

.join

(path)表示將字元列表轉化成字串

else

:for i in dic[str[0]

]: # 否則回溯

path.

(i) # 把候選值新增到path陣列

back_track

(str[1:

]) # 繼續回溯下乙個

path.

pop(

) # 回退

back_track

(digits)

return res

佇列法
class

solution

: def lettercombinations

(self, digits: str)

-> list[str]

:'''佇列法(類似與暴力遍歷)

先讓2對應的字母入佇列,然後出對,每乙個出對的字母再逐個結合3中的字母再入隊,模擬

'''if not digits:

return

phone =

['abc'

,'def'

,'ghi'

,'jkl'

,'mno'

,'pqrs'

,'tuv'

,'wxyz'

] que =

# 將第乙個數字對應的字母全部入佇列,減2是因為phone的下標相對偏移了2個位置

for i in phone[

int(digits[0]

)-2]

: que.

(i)if

len(digits)

>

1: # 如果digits不止乙個數字,則開始入隊遍歷

for num in digits[1:

]: # 需要遍歷的趟數 = 所給的數字數目-

1for _ in

range

(len

(que)

): # 當前佇列的所有字母都要出對重新組合

c = que.

pop(0)

for i in phone[

int(num)-2

]: # 組合新的

回溯 leetcode 電話號碼的字母組合

給定乙個僅包含數字 2 9 的字串,返回所有它能表示的字母組合。答案可以按 任意順序 返回。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。輸入 digits 23 輸出 ad ae af bd be bf cd ce cf 17.號碼的字母組合 定義乙個path記錄每次迴圈放入的...

電話號碼的字母組合

給乙個數字字串,每個數字代表乙個字母,請返回其所有可能的字母組合。下圖的手機按鍵圖,就表示了每個數字可以代表的字母。樣例給定 23 返回 ad ae af bd be bf cd ce cf 注意以上的答案是按照詞典編撰順序進行輸出的,不過,在做本題時,你也可以任意選擇你喜歡的輸出順序。class ...

電話號碼的字母組合

給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映關係如下 示例 輸入 23 輸出 ad ae af bd be bf cd ce cf 注 輸出字串順序任意 我的 public class lettercombinationsofaphonenumber public...