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

Python에서 메시지를 디코딩할 수 있는 여러 가지 방법을 찾는 프로그램

<시간/>

'a' =1, 'b' =2, ... 'z' =26과 같은 매핑이 있고 인코딩된 메시지 메시지 문자열이 있다고 가정하고 디코딩할 수 있는 방법의 수를 계산해야 합니다.

따라서 입력이 message ="222"와 같으면 bbb, bv 및 vb의 3가지 방법으로 디코딩될 수 있으므로 출력은 3이 됩니다.

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

  • 메모 :=메시지 크기 + 1과 같은 크기의 0 목록

  • 메모[0] :=1

  • memo[1] :=message[0]이 "0"과 같지 않으면 1, 그렇지 않으면 0

  • 메시지 크기 범위 2에 있는 i에 대해

    • n1 :=메시지의 숫자 값[인덱스 i-1에서 i까지]

    • n2 :=메시지의 숫자 값[인덱스 i-2에서 i까지]

    • n1_valid:=n1> 0일 때 참

    • n2_valid:=n2> 9 및 n2 <27

      일 때 참
    • n1_valid가 참이면

      • 메모[i] :=메모[i] + 메모[i-1]

    • n2_valid가 참이면

      • 메모[i] :=메모[i] + 메모[i-2]

  • 메모의 마지막 요소 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

class Solution:
   def solve(self, message):
      memo = [0 for i in range(len(message)+1)]
      memo[0] = 1
      memo[1] = 1 if message[0]!="0" else 0

      for i in range(2,len(message)+1):
         n1 = int(message[i-1:i])
         n2 = int(message[i-2:i])

         n1_valid= n1>0
         n2_valid= n2>9 and n2<27

         if n1_valid:
            memo[i]+=memo[i-1]
         if n2_valid:
            memo[i]+=memo[i-2]
      return memo[-1]
ob = Solution()
message = "2223"
print(ob.solve(message))

입력

"2223"

출력

5