-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy path0091_decode_ways.py
More file actions
108 lines (80 loc) · 2.06 KB
/
0091_decode_ways.py
File metadata and controls
108 lines (80 loc) · 2.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# ------------------------------------------------------------------------------
# Question:
# ------------------------------------------------------------------------------
# tags:
'''
A message containing letters from A-Z is being encoded to numbers using the
following mapping:
'A' -> 1
'B' -> 2
...
'Z' -> 26
Given a non-empty string containing only digits, determine the total number of
ways to decode it.
Example 1:
Input: "12"
Output: 2
Explanation: It could be decoded as "AB" (1 2) or "L" (12).
Example 2:
Input: "226"
Output: 3
Explanation: It could be decoded as "BZ" (2 26), "VF" (22 6), or "BBF" (2 2 6).
'''
# ------------------------------------------------------------------------------
# Solutions
# ------------------------------------------------------------------------------
import unittest
from typing import *
from test_utils.debug import debug
class Solution:
'''
Time:
Space:
'''
'''
2 => return 1
/
23
\
'' => return 1
/
223
\
L 3 => return 1
/
f(1223)
\
R 23 => return 1
1223
i
edge case:
01
/
f(101)
\
1
'''
def numDecodings(self, s: str) -> int:
@debug
def dfs(index):
if index == len(s):
return 1
if s[index] == '0':
return 0
if index == len(s) - 1:
return 1
left = dfs(index + 1)
right = dfs(index + 2) if int(s[index:index + 2]) <= 26 else 0
return (left + right)
pass
return dfs(0)
# ------------------------------------------------------------------------------
# Tests
# ------------------------------------------------------------------------------
class TestSolution(unittest.TestCase):
def test_simple(self):
s = Solution()
string = '226'
result = s.numDecodings(string)
self.assertEqual(result, 3)
unittest.main(verbosity=2)