1.遞迴
class
solution
(object):
deflettercombinations
(self, digits)
:"""
:type digits: str
:rtype: list[str]
"""# 建立字母對應的字元列表的字典
dic =
# 儲存結果的陣列
ret_str =
iflen
(digits)==0
:return
# 遞迴出口,當遞迴到最後乙個數的時候result拿到結果進行for迴圈遍歷
iflen
(digits)==1
:return dic[
int(digits[0]
)]# 遞迴呼叫
result = self.lettercombinations(digits[1:
])# result是乙個陣列列表,遍歷後字串操作,加入列表
for r in result:
for j in dic[
int(digits[0]
)]:return ret_str
if __name__ ==
'__main__'
: s = solution(
)print
(s.lettercombinations(
'23'))
----
----
----
----
----
- 原文:https:
80554517
2.dfs
class
solution
:def
lettercombinations
(self, digits:
str)
-> list[
str]
: dic =
if digits =='':
#排除為空的情況
return
m =len(digits)
words =
for elem in digits:
#將數字解析為字母
) result =
#儲存最後結果
strs =[0
]* m#用來儲存字母元素
stack =
#棧[0,
0])while stack !=
: i,j = stack.pop(
)#出棧
strs[i]
= words[i]
[j]if i == m-1:
#到達葉子節點,儲存結果
''.join(strs)
)if j <
len(words[i])-
1:#同乙個index下,將當前元素右邊元素入棧
[i,j +1]
)if i < m-1:
#將下乙個index的最左邊的元素入棧
[i+1,0
])return result
3.迭代
class
solution
:def
lettercombinations
(self, digits)
:"""
:type digits: str
:rtype: list[str]
"""num=
iflen
(digits)==0
:return
res=[''
]for i in
range
(len
(digits)):
dlist=
list
(num[digits[i]])
new_res=
for j in
range
(len
(res)):
for k in
range
(len
(dlist)):
+dlist[k]
)del res[:]
res=new_res.copy(
)return res
17 電話號碼的字母組合
給定乙個數字字串,返回數字所有可能表示的字母組合。下面給出數字到字母的對映 和 號碼一樣 輸入 數字字串 23 輸出 ad ae af bd be bf cd ce cf 思路1 採用迭代的方法。class solution if digits.empty return vector vectorr...
17 電話號碼的字母組合
給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。圖中顯示 2 abc 3 def 4 ghi 5 jkl 6 mno 7 pqrs 8 tuv 9 wxyz 輸入 23 輸出 ad ae af bd be bf cd ce...
17 電話號碼的字母組合
分析題目,遞迴雖然簡單,但是消耗了額外的空間,故還是選擇遍歷的辦法。思路如下 每一次新增乙個字母,把之前已經新增過的作為乙個整體,再和新新增的字母組合 注意刪去低維元素 class solution list result newarraylist if digits.length 0 處理第乙個數...