Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 디코딩 방법


A에서 Z까지의 문자가 포함된 메시지가 'A' → 1, 'B' → 2 ... 'Z' → 매핑을 사용하여 숫자로 인코딩되고 있다고 가정합니다. 26. 따라서 숫자만 포함하는 비어 있지 않은 문자열이 하나 있다면 디코딩할 수 있는 방법의 수를 찾아야 합니다. 따라서 문자열이 "12"와 같으면 "AB" 또는 "L"로 만들 수 있으므로 두 가지 가능한 방법이 있습니다. 따라서 답은 2가 됩니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 동적 프로그래밍을 사용하여 이 문제를 해결할 것입니다.
  • n :=s의 길이
  • dp :=n개의 0이 있는 배열
  • s[0]이 '0'이 아니면 dp[0] :=1
  • 1 ~ n – 1 범위의 i에 대해
    • x :=s[i] 정수로, y :=인덱스 i – 1에서 정수로 i + 1까지 s의 부분 문자열
    • 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의 마지막 요소를 반환

예시(파이썬)

더 나은 이해를 위해 다음 구현을 살펴보겠습니다. −

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