Giả sử chúng ta có một chuỗi chứa các chữ số từ 2-9. Chúng ta phải trả về tất cả các tổ hợp chữ cái có thể mà số đó đại diện. Một ánh xạ chữ số sang chữ cái (giống như trên bàn phím điện thoại) được cho dưới đây. Lưu ý 1 không ánh xạ đến bất kỳ chữ cái nào.
| 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 | # |
Ví dụ, nếu chuỗi cho trước là "23", các chuỗi có thể sẽ là ["ad","ae","af","bd","be","bf","cd","ce","cf"].
Để giải quyết, chúng ta làm theo các bước sau:
- Định nghĩa hàm
solveđể giải quyết bằng đệ quy. - Hàm
solvenhậndigits,characters,result,current_stringvàcurrent_level, hàm sẽ như sau:- Nếu
current_level == độ dài digits, thêmcurrent_stringvàoresult, và trả về. - Với mỗi ký tự
itrongcharacters[digits[current_level]]:- Gọi
solve(digits, characters, result, current_string + i, current_level + 1).
- Gọi
- Nếu
- Hàm thực tế sẽ như sau:
- Nếu độ dài
digitslà 0, trả về danh sách rỗng. - Định nghĩa một bản đồ ánh xạ số và chuỗi ký tự tương ứng.
result := danh sách rỗng.- Gọi
solve(digits, characters, result, "", 0).
- Nếu độ dài
Ví dụ (Python)
Xem triển khai sau để hiểu rõ hơn:
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("37"))
Đầu vào
"37"
Đầu ra
["dp","dq","dr","ds","ep","eq","er","es","fp","fq","fr","fs"]