今天是紀錄LeetCode解題的第十七天
第十七題題目:Given a string containing digits from 2-9 inclusive, return all possible letter combinations that the number could represent. Return the answer in any order.
A mapping of digits to letters (just like on the telephone buttons) is given below. Note that 1 does not map to any letters.
給定一個字串包含數字2~9,回傳數字所對應的字母的所有組合,回傳的答案可以是任何順序
以下是數字所對應到的字母(就像電話按鈕一樣),注意1沒有任何對應的字母
我們先遍歷他給的digits,把要組合的字母存進data裡,接著用回溯法把所有可能的組合排列出來,假設'abc'和'def'做組合,找到'ad'組合後,回溯'd',再用'a'去找下一個可以做組合的字母'e',找到'ae',再回溯,用'a'作配對,找到'f',組合成'af',接著都沒有可以配對的字母了,那麼回溯'a',換找'b',依此類推來找到所有組合
class Solution:
def letterCombinations(self, digits: str) -> List[str]:
dic = {"1":"","2":"abc","3":"def","4":"ghi","5":"jkl","6":"mno","7":"pqrs","8":"tuv","9":"wxyz"}
if not digits:
return []
else:
data = []
for c in digits:
data.append(dic[c])
result = []
dfs(0,[],data,result)
return result
def dfs(index,path,data,result):
if index == len(data):
result.append("".join(path))
return
for c in data[index]:
dfs(index+1,path+[c],data,result)
初始狀態
第一次執行(找和a的所有組合)
依此類推找到所有的組合,這題也是用到了DFS+Backtracking的概念,是很經典的字母組合題型,如果還不熟悉此演算法的,可以多從這樣的簡單題實作累積解題經驗