給定乙個僅包含數字 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...