File tree 1 file changed +52
-0
lines changed
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