Leetcode 17 電話號碼的字母組合

2021-09-19 06:42:09 字數 2154 閱讀 2600

給定乙個僅包含數字 2-9 的字串,返回所有它能表示的字母組合。

給出數字到字母的對映如下(與**按鍵相同)。注意 1 不對應任何字母。

示例:輸入:"23"

輸出:["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

我的方法:

直觀感覺是用遞迴來處理,遞迴的關鍵是找到前一步和後一步返回值之間的關係,然後確立乙個終止條件。用dict儲存數字與字母的對映關係。

對於每個數字,將其代表的字元與之前所有數字的返回值拼接,即可得到結果。

完成題目的速度很快,但成績一般:執行用時: 32 ms, 在letter combinations of a phone number的python提交中擊敗了17.05% 的使用者。記憶體消耗: 10.8 mb, 在letter combinations of a phone number的python提交中擊敗了0.93% 的使用者。

class solution(object):

def lettercombinations(self, digits):

""":type digits: str

:rtype: list[str]

"""s=solution()

# 用遞迴來處理

d=# 異常處理

if len(digits)==0:

return

# 終止條件

if len(digits)==1:

return d[digits]

else:

ans=

# 遞迴運算

for i in s.lettercombinations(digits[:-1]):

for j in d[digits[-1]]:

return ans

別人的方法:基本思想和上述方法並無太大差別,同樣是遞迴。區別僅在於:

這裡用了兩個函式來解決。

處理的順序與我的方法不同,這裡是將首個字元與後面所有字元連線,而我是把前面所有字元與最後乙個字元連線。

執行效率並沒有比我的方法更高,用時差不多:執行用時 : 36 ms, 在letter combinations of a phone number的python提交中擊敗了10.39%的使用者。記憶體消耗 : 10.8 mb, 在letter combinations of a phone number的python提交中擊敗了0.93%的使用者。

很奇怪,這個方法在最終的題解中提示只需要20ms,但我貼進去執行卻花了36ms。

class solution(object):

def lettercombinations(self, digits):

""":type digits: str

:rtype: list[str]

"""rlt =

if len(digits)==0:

return rlt # 如果數字串長度為0,則說明沒有返回值

dicts =

rlt = self.letter_com_core(digits, dicts) #呼叫函式,得到最終的結果

return rlt

# 這是乙個遞迴函式

def letter_com_core(self, digits, dicts):

rlt =

# 基準條件,如果長度為1,就返回單字元列表

if len(digits)==1:

rlt = dicts[digits[0]]

return rlt

# 遞迴條件

# 主要分為兩部分,頭和尾,相互結合

for pre_char in dicts[digits[0]]:

back_chars = self.letter_com_core(digits[1:], dicts) # 得到尾

for single_back_char in back_chars:

return rlt

Leetcode17 電話號碼組合

leetcode17 號碼組合 給定乙個僅包含數字 2 9 的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。示例 輸入 23 輸出 ad ae af bd be bf cd ce cf 思路 大家都能想到,我每次從裡面選擇乙個數,然後把所有的可能...

leetcode 17 電話號碼的字母組合

題目描述 給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。示例 輸入 23 輸出 ad ae af bd be bf cd ce cf 實現 string num 10 class solution private tem...

LeetCode17電話號碼的字母組合

給定乙個僅包含數字2 9的字串,返回所有它能表示的字母組合。給出數字到字母的對映如下 與 按鍵相同 注意 1 不對應任何字母。示例 輸入 23 輸出 ad ae af bd be bf cd ce cf class solution def lettercombinations self,digit...