17 電話號碼的字母組合

2021-09-17 02:00:05 字數 2184 閱讀 5029

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 處理第乙個數...