91. Decode Ways
Medium
'A' -> "1"
'B' -> "2"
...
'Z' -> "26"Input: s = "12"
Output: 2
Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).Solution
Last updated
'A' -> "1"
'B' -> "2"
...
'Z' -> "26"Input: s = "12"
Output: 2
Explanation: "12" could be decoded as "AB" (1 2) or "L" (12).Last updated
Input: s = "226"
Output: 3
Explanation: "226" could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).Input: s = "06"
Output: 0
Explanation: "06" cannot be mapped to "F" because of the leading zero ("6" is different from "06").class Solution:
def numDecodings(self, s: str) -> int:
# Similar to staircase problem
arr = [0]*(len(s)+1)
arr[0] = 1
arr[1] = 0 if s[0] == '0' else 1
for index in range(2, len(s)+1):
# one step
if 0 < int(s[index-1:index]) <=9:
arr[index] += arr[index-1]
if 10 <= int(s[index-2:index]) <= 26:
arr[index] += arr[index-2]
return arr[len(s)]
class Solution:
def numDecodings(self, s:str) -> int:
if len(s) == 0 or s is None:
return 0
@lru_cache(maxsize=None)
def dfs(string):
if len(string)>0:
if string[0] == '0':
return 0
if string == "" or len(string) == 1:
return 1
if int(string[0:2]) <= 26:
first = dfs(string[1:])
second = dfs(string[2:])
return first+second
else:
return dfs(string[1:])
result_sum = dfs(s)
return result_sum