Skip to content

Commit 3f656d0

Browse files
committed
solve(w03): 91. Decode Ways
1 parent 9059ba7 commit 3f656d0

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

โ€Ždecode-ways/seungriyou.py

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
# https://leetcode.com/problems/decode-ways/
2+
3+
class Solution:
4+
def numDecodings1(self, s: str) -> int:
5+
"""
6+
[Complexity]
7+
- TC: O(n)
8+
- SC: O(n)
9+
10+
[Approach]
11+
DP๋กœ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
12+
dp[i] = s[i]๊นŒ์ง€ ๋ดค์„ ๋•Œ, ๊ฐ€๋Šฅํ•œ decoding ๊ฐœ์ˆ˜์˜ ์ดํ•ฉ
13+
1) s[i]ย ํ•œ ์ž๋ฆฌ๋งŒ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ: s[i] != 0
14+
=> dp[i] += dp[i - 1]
15+
2) s[i - 1:i + 1] ๋‘ ์ž๋ฆฌ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ: 10 <= s[i - 1:i + 1] <= 26
16+
=> dp[i] += dp[i - 2]
17+
๋”ฐ๋ผ์„œ, ์ดˆ๊ธฐ ๊ฐ’์œผ๋กœ dp[0], dp[1]์„ ๋จผ์ € ์ฑ„์›Œ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
18+
"""
19+
20+
n = len(s)
21+
dp = [0] * n
22+
23+
# early stop
24+
if s[0] == "0":
25+
return 0
26+
if n == 1:
27+
return 1
28+
29+
# initialize (dp[0], dp[1])
30+
dp[0] = 1
31+
if s[1] != "0":
32+
dp[1] += dp[0]
33+
if 10 <= int(s[0:2]) <= 26:
34+
dp[1] += 1
35+
36+
# iterate (dp[2] ~)
37+
for i in range(2, n):
38+
# 1) s[i]ย ํ•œ ์ž๋ฆฌ๋งŒ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
39+
if s[i] != "0":
40+
dp[i] += dp[i - 1]
41+
# 2) s[i - 1:i + 1] ๋‘ ์ž๋ฆฌ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
42+
if 10 <= int(s[i - 1:i + 1]) <= 26:
43+
dp[i] += dp[i - 2]
44+
45+
return dp[-1]
46+
47+
def numDecodings(self, s: str) -> int:
48+
"""
49+
[Complexity]
50+
- TC: O(n)
51+
- SC: O(1)
52+
53+
[Approach]
54+
O(n) space DP์—์„œ ๋งค ๋‹จ๊ณ„์—์„œ dp[i - 1], dp[i - 2] ๋‘ ๊ฐ’๋งŒ ํ™•์ธํ•˜๋ฏ€๋กœ, O(1) space๋กœ space optimize ํ•  ์ˆ˜ ์žˆ๋‹ค.
55+
dp[i - 1] = prev1
56+
dp[i - 2] = prev2
57+
"""
58+
59+
prev2, prev1 = 1, 1 if s[0] != "0" else 0
60+
61+
for i in range(1, len(s)):
62+
curr = 0 # = dp[i]
63+
64+
# 1) s[i]ย ํ•œ ์ž๋ฆฌ๋งŒ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
65+
if s[i] != "0":
66+
curr += prev1
67+
# 2) s[i - 1:i + 1] ๋‘ ์ž๋ฆฌ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ
68+
if 10 <= int(s[i - 1:i + 1]) <= 26:
69+
curr += prev2
70+
71+
prev2, prev1 = prev1, curr
72+
73+
return prev1

0 commit comments

Comments
ย (0)