Skip to content

Commit 7eecb66

Browse files
committed
add Coin Change solution
1 parent 8fee1b1 commit 7eecb66

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

coin-change/HoonDongKang.ts

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/**
2+
* [Problem]: [322] Coin Change
3+
*
4+
* (https://leetcode.com/problems/coin-change/description/)
5+
*/
6+
function coinChange(coins: number[], amount: number): number {
7+
// 시간복잡도: O(c^a)
8+
// 공간복잡도: O(a)
9+
// Time Exceed
10+
function dfsFunc(coins: number[], amount: number): number {
11+
if (!amount) return 0;
12+
let result = dfs(amount);
13+
14+
return result <= amount ? result : -1;
15+
16+
function dfs(remain: number): number {
17+
if (remain === 0) return 0;
18+
if (remain < 0) return amount + 1;
19+
20+
let min_count = amount + 1;
21+
22+
for (let coin of coins) {
23+
const result = dfs(remain - coin);
24+
min_count = Math.min(min_count, result + 1);
25+
}
26+
27+
return min_count;
28+
}
29+
}
30+
// 시간복잡도: O(ca)
31+
// 공간복잡도: O(a)
32+
function dpFunc(coins: number[], amount: number): number {
33+
const dp = new Array(amount + 1).fill(amount + 1);
34+
dp[0] = 0;
35+
36+
for (let coin of coins) {
37+
for (let i = coin; i <= amount; i++) {
38+
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
39+
}
40+
}
41+
42+
return dp[amount] <= amount ? dp[amount] : -1;
43+
}
44+
45+
// 시간복잡도: O(ca)
46+
// 공간복잡도: O(a)
47+
function memoizationFunc(coins: number[], amount: number): number {
48+
const memo: Record<number, number> = {};
49+
50+
const result = dfs(amount);
51+
return result <= amount ? result : -1;
52+
53+
function dfs(remain: number): number {
54+
if (remain === 0) return 0;
55+
if (remain < 0) return amount + 1;
56+
if (remain in memo) return memo[remain];
57+
58+
let min_count = amount + 1;
59+
60+
for (let coin of coins) {
61+
const res = dfs(remain - coin);
62+
min_count = Math.min(min_count, res + 1);
63+
}
64+
65+
memo[remain] = min_count;
66+
67+
return min_count;
68+
}
69+
}
70+
71+
return memoizationFunc(coins, amount);
72+
}

0 commit comments

Comments
 (0)