Skip to content

Commit f011d0f

Browse files
committed
Add solution for Decode Ways problem
1 parent a69a338 commit f011d0f

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

β€Ždecode-ways/gcount85.pyβ€Ž

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
"""
2+
# Intuition
3+
dp[n]은 s의 n번째 κΈ€μžκΉŒμ§€ λ””μ½”λ”©ν• μˆ˜ μžˆλŠ” 경우의 수
4+
dp[n] = dp[n-1](if can be decoded) + dp[n-2](if can be decoded)
5+
6+
# Approach
7+
i-1 ~ iκΉŒμ§€μ˜ 숫자, i-2 ~ iκΉŒμ§€μ˜ μˆ«μžκ°€ 각각 λ””μ½”λ”© 될 수 μžˆλŠ”μ§€ ν™•μΈν•œλ‹€.
8+
λ””μ½”λ”© κ°€λŠ₯ν•˜λ©΄ κ·Έ μœ„μΉ˜μ˜ dp λ°°μ—΄μ˜ 값을 각각 λ”ν•˜κ³ , λ””μ½”λ”© λΆˆκ°€λŠ₯ν•˜λ©΄ λ”ν•˜μ§€ μ•ŠλŠ”λ‹€.
9+
10+
# Complexity
11+
- Time complexity: N을 s의 길이라고 ν•  λ•Œ, 반볡문으둜 O(N)
12+
13+
- Space complexity: dp λ°°μ—΄ λ§Œλ“œλŠ” 데에 O(N)
14+
"""
15+
16+
17+
class Solution:
18+
def numDecodings(self, s: str) -> int:
19+
n = len(s)
20+
dp = [0] * (n + 1)
21+
dp[1] = 1 if s[0] != "0" else 0
22+
if dp[1] == 0 or n == 1:
23+
return dp[1]
24+
dp[2] = 1 if int(s[1]) > 0 else 0
25+
dp[2] += 1 if int(s[:2]) > 9 and int(s[:2]) < 27 else 0
26+
for i in range(3, n + 1):
27+
dp[i] = dp[i - 1] if s[i - 1 : i] != "0" else 0
28+
dp[i] += dp[i - 2] if s[i - 2 : i] > "09" and s[i - 2 : i] < "27" else 0
29+
return dp[n]

0 commit comments

Comments
Β (0)