File tree Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Expand file tree Collapse file tree 1 file changed +52
-0
lines changed Original file line number Diff line number Diff line change 1+ /*
2+ 풀이 :
3+ i 번째 연산을 시작 전 cur는 i + 1에서 시작하는 경우의 수, nxt에는 i + 2에서 시작하는 경우의 수 저장돼있다
4+ i 번째 연산이 끝난 후 cur는 i에서 시작하는 경우, nxt에는 i + 1에서 시작하는 경우의 수 저장되도록 한다
5+ s의 길이가 1일 때 무조건 1개의 경우의 수를 가지므로 cur 1로 초기화
6+
7+ 세가지 경우의 수
8+ 1. s[i]가 '0' 일때 0으로 시작하는 문자열은 해석가능한 수가 없으므로 cur를 0으로 한다
9+ 2. s[i]로 시작하는 두 자리 수가 숫자로 변환하면 27보다 작으면, 1자리로 변환하는 경우의 수(cur) + 2자리로 변환하는 경우의 수(nxt)로 cur 변경
10+ 3. 그 외에는 1자리로 변환하는 경우의 수 밖에 없으므로 cur 그대로
11+
12+ 문자열 끝에서 조건에 맞춰 업데이트 하면서 문자열 처음까지 순회하고 cur 리턴한다
13+
14+ 문자열 길이 N
15+
16+ TC : O(N)
17+ 문자열 한번 순회
18+
19+ SC : O(1)
20+ */
21+
22+ #include < string>
23+ using namespace std ;
24+
25+ class Solution {
26+ public:
27+ int numDecodings (string s) {
28+ int cur = 1 ;
29+ int nxt = 0 ;
30+ int tmp;
31+
32+ for (int i = s.size () - 1 ; i >= 0 ; i--)
33+ {
34+ tmp = nxt;
35+ if (s[i] == ' 0' )
36+ {
37+ nxt = cur;
38+ cur = 0 ;
39+ }
40+ else if (i < s.size () - 1 && stoi (s.substr (i, 2 )) < 27 )
41+ {
42+ nxt = cur;
43+ cur = cur + tmp;
44+ }
45+ else
46+ {
47+ nxt = cur;
48+ }
49+ }
50+ return cur;
51+ }
52+ };
You can’t perform that action at this time.
0 commit comments