LeetCode 17 電話號碼的字母組合 python實現
阿新 • • 發佈:2018-11-10
題目
給定一個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。
給出數字到字母的對映如下(與電話按鍵相同)。注意 1 不對應任何字母。
示例:
輸入:“23”
輸出:[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].
說明:
儘管上面的答案是按字典序排列的,但是你可以任意選擇答案輸出的順序
python實現,可以通過
解題思路:
主要是遞迴,沒啥說的看程式碼馬上就可以明白 我自己的感覺是類似於 DFS(不完全類似吧)
這裡重點吐槽一下:
感覺這一題目不合理,這一題目使用遞迴很容易想到.但是我在想演算法採用遞迴來實現,對長度很長的數字組合 效果也是很差的,時間複雜度和空間複雜度非常高,速度是非常非常慢的!!! ,所以覺得不可行,就放棄了這個思路
結果想了一個上午,都想不出來好的方法,沒辦法只能寫了一個遞迴試一下,官方竟然讓我的程式碼通過了.感覺很不合理,
我用一個測試用例"22222222222222222"測試了一下啊,官方也是解不出來(因為具有非常高的時間複雜度和空間複雜度,超高)!
後來想了一下,估計官方出這題目的時候考慮到我們平時打字不會按下好多數字!!呵呵
class Solution:
@staticmethod
def letterCombinations(digits):
"""
:type digits: str
:rtype: List[str]
"""
num_str={
2:"abc",
3:"def",
4:"ghi",
5:"jkl",
6:"mno",
7:"pqrs",
8 :"tuv",
9:"wxyz"
}
if len(digits)==0:
return []
if len(digits)==1:
return list(num_str[int(digits)])
res=[]
res_suffix=Solution.letterCombinations(digits[1:])
for x in num_str[int(digits[0])]:
res.extend([x+ y for y in res_suffix])
return res