Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมค้นหาสตริงที่เป็นไปได้ทั้งหมดที่พิมพ์โดยใช้ปุ่มกดโทรศัพท์ใน python


สมมติว่าเรามีสตริงที่มีตัวเลขตั้งแต่ 2-9 เราต้องหาชุดตัวอักษรที่เป็นไปได้ทั้งหมดที่ตัวเลขนั้นสามารถสร้างได้ การจับคู่ตัวเลขกับตัวอักษรหนึ่งตัว (เหมือนกับบนปุ่มโทรศัพท์) แสดงไว้ด้านล่าง โปรดทราบว่า 1 จับคู่อักขระบางตัวแต่ไม่มีตัวอักษร

1
2
a b c
3
d e f
4
จี เฮ้
5
เจเคแอล
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 เพื่อแก้ปัญหาแบบวนซ้ำ
  • วิธีแก้ใช้ตัวเลข อักขระ ผลลัพธ์ current_string และ current_level ฟังก์ชันจะเป็นเช่นไร
  • ถ้า current_level =ความยาวของตัวเลข ให้เพิ่มสตริงปัจจุบันหลังผลลัพธ์ แล้วส่งคืน
  • สำหรับอักขระทั้งหมด i ในอักขระ[digits[current_level]]
    • ดำเนินการแก้ไข (ตัวเลข, อักขระ, ผลลัพธ์, current_string + i, current_level + 1)
  • การใช้งานจริงจะเป็นแบบ
  • ถ้าความยาวหลักเป็น 0 ให้คืนค่ารายการว่าง
  • กำหนดหนึ่งแผนที่เพื่อเก็บตัวเลขและอักขระที่เกี่ยวข้องเป็นสตริง
  • ผลลัพธ์ :=รายการว่าง
  • แก้การโทร (ตัวเลข, อักขระ, ผลลัพธ์, “”, 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']