Skip to content

Commit c9f69f4

Browse files
committed
feat(soobing): week3 > decode-ways
1 parent c8ef9a6 commit c9f69f4

File tree

1 file changed

+29
-0
lines changed

1 file changed

+29
-0
lines changed

β€Ždecode-ways/soobing2.tsβ€Ž

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/**
2+
* 문제 μœ ν˜•
3+
* - DP (점화식 이용, λ°±νŠΈλž˜ν‚Ή μ‚¬μš©μ‹œ TLE λ°œμƒ)
4+
*
5+
* 문제 μ„€λͺ…
6+
* - μ£Όμ–΄μ§„ λ¬Έμžμ—΄μ„ 숫자둜 λ³€ν™˜ν•˜λŠ” λ°©λ²•μ˜ 갯수λ₯Ό κ΅¬ν•˜λŠ” 문제
7+
*
8+
* 아이디어
9+
* 1) f(i) = λ§ˆμ§€λ§‰ ν•œμžλ¦¬μˆ˜κ°€ λ³€ν™˜ κ°€λŠ₯ν•˜λ©΄ f(i-1) + λ§ˆμ§€λ§‰ λ‘μžλ¦¬μˆ˜κ°€ κ°€λŠ₯ν•˜λ©΄ f(i-2)
10+
* - ν•œμžλ¦¬μˆ˜λŠ” 0만 μ•„λ‹ˆλ©΄ 됨, λ‘μžλ¦¬μˆ˜λŠ” 10~26 사이여야 함.
11+
*
12+
*/
13+
function numDecodings(s: string): number {
14+
const n = s.length;
15+
if (n === 1) return s[0] === "0" ? 0 : 1;
16+
17+
const dp = Array(n + 1).fill(0);
18+
dp[0] = 1;
19+
dp[1] = s[0] === "0" ? 0 : 1;
20+
21+
for (let i = 2; i <= n; i++) {
22+
const one = Number(s[i - 1]);
23+
const two = Number(s[i - 2] + s[i - 1]);
24+
if (one !== 0) dp[i] += dp[i - 1];
25+
if (two >= 10 && two <= 26) dp[i] += dp[i - 2];
26+
}
27+
28+
return dp[n];
29+
}

0 commit comments

Comments
Β (0)