Python程式:查詢使用電話鍵盤輸入的所有可能的字串
假設我們有一個包含數字 2-9 的字串。我們必須找到該數字可以生成的全部可能的字母組合。下面給出了數字到字母的對映(就像電話按鍵上的那樣)。請注意,1 確實映射了一些字元,但沒有字母。
1 | 2 a b c | 3 d e f |
4 g h i | 5 j k l | 6 m n o |
7 p q r s | 8 t u v | 9 w x y z |
* | 0 | # |
例如,如果給定的字串是“49”,則可能的字串將是 ['gw', 'gx', 'gy', 'gz', 'hw', 'hx', 'hy', 'hz', 'iw', 'ix', 'iy', 'iz']
為了解決這個問題,我們將遵循以下步驟
- 定義一個名為 solve 的陣列,以遞迴方式解決問題
- solve 方法接收 digits、characters、result、current_string 和 current_level,函式將如下所示:
- 如果 current_level 等於 digits 的長度,則在 result 後新增 current_string,並返回。
- 對於 characters[digits[current_level]] 中的所有字元 i
- 執行 solve(digits, characters, result, current_string + i, current_level + 1)
- 實際函式將如下所示:
- 如果 digits 長度為 0,則返回空列表。
- 定義一個 map 來儲存數字和相應的字元作為字串。
- result := 一個空列表。
- 呼叫 solve(digits, characters, result, “”, 0)
讓我們看看下面的實現,以便更好地理解。
示例
class Solution(object): def letterCombinations(self, digits): if len(digits) == 0: return [] characters = {2:"abc",3:"def",4:"ghi",5:"jkl",6:"mno",7:"pqrs",8:"tuv",9:"wxyz"} result = [] self.solve(digits,characters,result) return result def solve(self, digits, characters, result, current_string="",current_level = 0): if current_level == len(digits): result.append(current_string) return for i in characters[int(digits[current_level])]: self.solve(digits,characters,result,current_string+i,current_level+1) ob1 = Solution() print(ob1.letterCombinations("49"))
輸入
"49"
輸出
['gw', 'gx', 'gy', 'gz', 'hw', 'hx', 'hy', 'hz', 'iw', 'ix', 'iy', 'iz']
廣告