Skip to content

Commit c13a9eb

Browse files
authored
sadie100: decode ways solution
1 parent af27ccb commit c13a9eb

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
/*
2+
dp 배열을 λ§Œλ“€κ³  sλ₯Ό μˆœνšŒν•˜λ©° 각 λ‹¨κ³„μ—μ„œ 이전 자리의 숫자λ₯Ό μ±„νƒν•˜κ±°λ‚˜ λ²„λ¦¬λŠ” 경우λ₯Ό 더해 λ‚˜κ°„λ‹€
3+
λ§Œμ•½ ν˜„μž¬ 순번의 μˆ«μžκ°€ 0일 경우 : 이전 자리의 숫자λ₯Ό 채택, i-1 순번의 μˆ«μžκ°€ 0μ΄κ±°λ‚˜ 3 이상이면 μ¦‰μ‹œ 0을 리턴. 아닐 경우 dp의 i-2λ²ˆμ§Έκ°’μ„ λ„£λŠ”λ‹€.
4+
이전 순번의 μˆ«μžμ™€ ν˜„μž¬ 숫자λ₯Ό λ”ν•œ 값이 26보닀 ν¬κ±°λ‚˜ 이전 순번의 μˆ«μžκ°€ 0일 경우 : κ°œλ³„ 자리의 숫자λ₯Ό 채택, 직전 dp값을 λ„£λŠ”λ‹€
5+
μœ„μ— λͺ¨λ‘ ν•΄λ‹Ήν•˜μ§€ μ•Šμ„ 경우 : κ°œλ³„ 자리의 숫자λ₯Ό μ±„νƒν•˜κ±°λ‚˜ λ²„λ¦¬λŠ” 경우λ₯Ό λ‹€ κ³ λ €ν•˜μ—¬ 직전 dpκ°’κ³Ό 2μŠ€ν… μ „ dp값을 λ”ν•œλ‹€
6+
맨 끝 μˆœλ²ˆμ— λ„λ‹¬ν–ˆμ„ λ•Œμ˜ 값을 κ΅¬ν•œλ‹€
7+
8+
μ‹œκ°„λ³΅μž‘λ„ : O(N) (N은 s의 길이)
9+
*/
10+
11+
function numDecodings(s: string): number {
12+
if(s.startsWith("0")) return 0;
13+
const dp = [];
14+
15+
dp.push(1);
16+
if(s.length<2) return dp[0]
17+
for(let i=1;i<s.length;i++){
18+
const numStr = s[i];
19+
if(numStr === "0") {
20+
if(s[i-1] === "0" || Number(s[i-1])>=3) return 0;
21+
dp.push(dp?.[i-2] ?? 1)
22+
}else if(Number(`${s[i-1]}${numStr}`) > 26 || s[i-1] === "0"){
23+
dp.push(dp[i-1])
24+
}else{
25+
dp.push(dp[i-1] + (dp?.[i-2] ?? 1))
26+
}
27+
}
28+
29+
return dp[s.length-1];
30+
};

0 commit comments

Comments
Β (0)