Skip to content

Commit 1aa2775

Browse files
committed
solve: decode-ways 문제 풀이 추가 - 두 가지 방법으로 구현
1 parent 6cad65f commit 1aa2775

File tree

1 file changed

+73
-0
lines changed

1 file changed

+73
-0
lines changed

decode-ways/reach0908.js

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
/**
2+
* 시간복잡도: O(n)
3+
* 실행속도: 65ms
4+
* @param {string} s
5+
* @return {number}
6+
*/
7+
const numDecodings = function (s) {
8+
const n = s.length;
9+
10+
const memo = new Array(n + 1).fill(0);
11+
12+
function dfs(i) {
13+
if (i === n) {
14+
return 1;
15+
}
16+
17+
if (s[i] === "0") {
18+
return 0;
19+
}
20+
21+
if (memo[i]) {
22+
return memo[i];
23+
}
24+
25+
let res = dfs(i + 1);
26+
27+
if (i + 1 < n && Number(s.slice(i, i + 2) <= 26)) {
28+
res += dfs(i + 2);
29+
}
30+
31+
memo[i] = res;
32+
33+
return res;
34+
}
35+
36+
return dfs[0];
37+
};
38+
39+
/**
40+
* 시간복잡도: O(n)
41+
* 실행속도: 0~1ms
42+
* @param {string} s
43+
* @return {number}
44+
*/
45+
/**
46+
* 시간 복잡도: O(n)
47+
* 공간 복잡도: O(n)
48+
*/
49+
var numDecodings2 = function (s) {
50+
const memo = new Map();
51+
memo.set(s.length, 1);
52+
53+
function dfs(start) {
54+
if (memo.has(start)) {
55+
return memo.get(start);
56+
}
57+
58+
if (s[start] === "0") {
59+
memo.set(start, 0);
60+
} else if (
61+
start + 1 < s.length &&
62+
parseInt(s.slice(start, start + 2)) < 27
63+
) {
64+
memo.set(start, dfs(start + 1) + dfs(start + 2));
65+
} else {
66+
memo.set(start, dfs(start + 1));
67+
}
68+
69+
return memo.get(start);
70+
}
71+
72+
return dfs(0);
73+
};

0 commit comments

Comments
 (0)