Computer >> Máy Tính >  >> Lập trình >> Python

Kết hợp chữ cái của một số điện thoại trong Python


Giả sử chúng ta có một chuỗi bao gồm các chữ số từ 2-9. Chúng tôi phải trả lại tất cả các kết hợp chữ cái có thể có mà số đó có thể đại diện. Dưới đây là một ánh xạ từ chữ số sang chữ cái (giống như trên các nút điện thoại). Lưu ý rằng 1 không liên kết với 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 là “23”, thì các chuỗi có thể sẽ là [“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce ”,“ Cf ”]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một mảng được gọi là giải quyết để giải quyết vấn đề một cách đệ quy
  • phương thức giải quyết nhận các chữ số, ký tự, kết quả, current_string và current_level, hàm sẽ như thế nào
  • nếu current_level =độ dài của các chữ số, sau đó thêm chuỗi hiện tại vào sau kết quả và trả về
  • cho tất cả các ký tự i trong các ký tự [chữ số [current_level]]
    • thực hiện giải quyết (chữ số, ký tự, kết quả, current_string + i, current_level + 1)
  • Chức năng thực tế sẽ như thế nào
  • nếu độ dài các chữ số là 0, thì trả về một danh sách trống
  • xác định một bản đồ để chứa các số và ký tự tương ứng dưới dạng một chuỗi
  • kết quả:=một danh sách trống
  • gọi giải quyết (chữ số, ký tự, kết quả, “”, 0)

Ví dụ (Python)

Hãy cùng chúng tôi xem cách triển khai sau đây để 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"]