File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+ } ;
You canβt perform that action at this time.
0 commit comments