File tree Expand file tree Collapse file tree 1 file changed +38
-0
lines changed
Expand file tree Collapse file tree 1 file changed +38
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ public int numDecodings (String s ) {
3+ if (s == null || s .length () == 0 || s .charAt (0 ) == '0' ) {
4+ return 0 ;
5+ }
6+
7+ int n = s .length ();
8+ int [] dp = new int [n + 1 ];
9+
10+ dp [0 ] = 1 ; // 빈 문자열을 해석하는 경우의 수는 1
11+ dp [1 ] = 1 ; // 첫 글자가 '0'이 아님을 위에서 체크했으므로 1 확정
12+
13+ // 2. DP 수행 (Bottom-Up)
14+ for (int i = 2 ; i <= n ; i ++) {
15+ // 현재 문자와 바로 앞 문자 추출
16+ // DP 인덱스 i는 문자열의 i번째 글자(인덱스 i-1)를 의미함
17+ char current = s .charAt (i - 1 );
18+ char prev = s .charAt (i - 2 );
19+
20+ // Case 1: 한 자리 숫자 해석 (1 ~ 9)
21+ // 현재 숫자가 '1'~'9'라면, 바로 직전 단계(i-1)의 경우의 수를 계승
22+ if (current >= '1' && current <= '9' ) {
23+ dp [i ] += dp [i - 1 ];
24+ }
25+
26+ // Case 2: 두 자리 숫자 해석 (10 ~ 26)
27+ // 이전 숫자와 합쳐서 값을 계산
28+ int twoDigit = (prev - '0' ) * 10 + (current - '0' );
29+
30+ if (twoDigit >= 10 && twoDigit <= 26 ) {
31+ dp [i ] += dp [i - 2 ];
32+ }
33+ }
34+
35+ // 3. 결과 반환
36+ return dp [n ];
37+ }
38+ }
You can’t perform that action at this time.
0 commit comments