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

ถอดรหัสวิธีใน Python


สมมติว่าเรามีข้อความที่มีตัวอักษรจาก A ถึง Z ถูกเข้ารหัสเป็นตัวเลขโดยใช้การจับคู่ต่อไปนี้ - 'A' → 1, 'B' → 2 ... 'Z' → 26. ดังนั้นถ้าเรามีสตริงที่ไม่ว่างหนึ่งสตริงที่มีตัวเลขเท่านั้น เราก็ต้องหาว่าจะสามารถถอดรหัสได้กี่วิธี ดังนั้นถ้าสตริงเป็นเหมือน "12" ก็สามารถสร้างจาก "AB" หรือ "L" ได้ดังนั้นจึงมีสองวิธีที่เป็นไปได้ ดังนั้นคำตอบจะเป็น 2.

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • เราจะแก้ปัญหานี้โดยใช้โปรแกรมไดนามิก
  • n :=ความยาวของ s
  • dp :=อาร์เรย์ที่มี n จำนวน 0s
  • ถ้า s[0] ไม่ใช่ '0' ดังนั้น dp[0] :=1
  • สำหรับฉันอยู่ในช่วง 1 ถึง n – 1
    • x :=s[i] เป็นจำนวนเต็ม y :=สตริงย่อยของ s จากดัชนี i – 1 ถึง i + 1 เป็นจำนวนเต็ม
    • ถ้า x>=1 และ y <=9 แล้ว dp[i] :=dp[i] + dp[i – 1]
    • ถ้า y>=10 และ y <=26
      • ถ้า i – 2>=0 แล้ว dp[i] :=dp[i] + dp[i – 2] ไม่เช่นนั้น ให้เพิ่ม dp[i] ขึ้น 1
  • คืนค่าองค์ประกอบสุดท้ายของ dp

ตัวอย่าง(Python)

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class Solution(object):
   def numDecodings(self, s):
      n = len(s)
      dp = [0 for i in range(n)]
      if s[0]!='0':
         dp[0]=1
      for i in range(1,n):
         x = int(s[i])
         y = int(s[i-1:i+1])
         if x>=1 and x<=9:
            dp[i]+=dp[i-1]
         if y>=10 and y<=26:
            if i-2>=0:
               dp[i]+=dp[i-2]
            else:
               dp[i]+=1
      return dp[-1]
ob1 = Solution()
print(ob1.numDecodings("226"))

อินพุต

"226"

ผลลัพธ์

3