'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