Skip to content

Commit b7232f6

Browse files
committed
decode
1 parent f4b9322 commit b7232f6

File tree

1 file changed

+26
-21
lines changed

1 file changed

+26
-21
lines changed

โ€Ždecode-ways/changhyumm.pyโ€Ž

Lines changed: 26 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,30 @@
11
class Solution:
22
def numDecodings(self, s: str) -> int:
3-
if s[0] == '0':
4-
return 0
3+
memo = {}
4+
5+
def decode(index):
6+
# ์ด๋ฏธ ๊ณ„์‚ฐํ–ˆ์œผ๋ฉด ๋ฐ”๋กœ ๋ฐ˜ํ™˜
7+
if index in memo:
8+
return memo[index]
9+
10+
# ๊ธฐ์ € ์‚ฌ๋ก€
11+
## ๋๊นŒ์ง€ ์™”์œผ๋ฉด ์„ฑ๊ณต
12+
if index == len(s):
13+
return 1
14+
## 0์œผ๋กœ ์‹œ์ž‘ํ•˜๋ฉด ๋ถˆ๊ฐ€๋Šฅ
15+
if s[index] == '0':
16+
return 0
17+
18+
# ์žฌ๊ท€ ๊ณ„์‚ฐ
19+
ways = decode(index + 1)
20+
21+
if index + 1 < len(s) and int(s[index:index+2]) <= 26:
22+
ways += decode(index + 2)
23+
24+
# ๋ฉ”๋ชจ์ด์ œ์ด์…˜
25+
memo[index] = ways
26+
return ways
527

6-
n = len(s)
7-
# dp[i]๋ฅผ i๋ฒˆ์จฐ๊นŒ์ง€ ์ฒ˜๋ฆฌํ–ˆ์„๋–„์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ์ •์˜
8-
dp = [0] * n
9-
# dp[0] = 1 (์ฒซ์ž๋ฆฌ ์ˆ˜)
10-
dp[0] = 1
11-
12-
# i๋ฒˆ์จฐ ์ˆซ์ž๊ฐ€ 1~9๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์œผ๋ฉด ์ด์ „๊นŒ์ง€์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜ ํ•ฉ์„ ์ด์–ด๊ฐ
13-
# i๋ฒˆ์จฐ ์ˆซ์ž(๋‘์ž๋ฆฌ์ˆ˜)๊ฐ€ 10~26์œผ๋กœ ๋Œ€์ฒด๋  ์ˆ˜ ์žˆ์œผ๋ฉด ์•ž์ž๋ฆฌ๋Š” ์‚ฌ์šฉํ•œ ๊ฒƒ์ด๋ฏ€๋กœ ๊ทธ ์•ž์ž๋ฆฌ๊นŒ์ง€์˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ์˜ด
1428
# ์‹œ๊ฐ„๋ณต์žก๋„, ๊ณต๊ฐ„๋ณต์žก๋„ O(n)
15-
for i in range(1, n):
16-
num1 = int(s[i])
17-
num2 = int(s[i -1 : i + 1])
18-
if 1 <= num1 <= 9:
19-
dp[i] += dp[i - 1]
20-
if 10 <= num2 <= 26:
21-
if i == 1:
22-
dp[i] += 1
23-
else:
24-
dp[i] += dp[i - 2]
25-
return dp[n-1]
29+
30+
return decode(0)

0 commit comments

Comments
ย (0)