Skip to content

Commit d69715d

Browse files
committed
DaleStudy#268 decode-ways solution
1 parent 4a067a3 commit d69715d

File tree

1 file changed

+52
-0
lines changed

1 file changed

+52
-0
lines changed

decode-ways/sungjinwi.cpp

+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
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+
};

0 commit comments

Comments
 (0)