Skip to content

Commit 1a29395

Browse files
committed
Coin Change
1 parent 596a480 commit 1a29395

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed

coin-change/sunjae95.js

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
/**
2+
* @description
3+
* brainstorming:
4+
* 1. asc sort + division calculate
5+
* 2. bfs + memoization
6+
*
7+
* strategy:
8+
* bfs + memoization
9+
*
10+
* reason:
11+
* Tried with brainstorming 1 but test case is false
12+
*
13+
* time complexity: O(n^k)
14+
* space complexity: O(n)
15+
*/
16+
class Node {
17+
constructor(val) {
18+
this.value = val;
19+
this.next = null;
20+
}
21+
}
22+
23+
class CustomQueue {
24+
constructor() {
25+
this.front = null;
26+
this.rear = null;
27+
this.size = 0;
28+
}
29+
30+
push(val) {
31+
const node = new Node(val);
32+
33+
if (this.size === 0) {
34+
this.front = node;
35+
this.rear = node;
36+
} else {
37+
this.rear.next = node;
38+
this.rear = node;
39+
}
40+
41+
this.size++;
42+
}
43+
44+
pop() {
45+
if (this.size === 0) return null;
46+
const node = this.front;
47+
this.front = this.front.next;
48+
this.size--;
49+
if (this.size === 0) this.rear = null;
50+
51+
return node.value;
52+
}
53+
}
54+
55+
var coinChange = function (coins, amount) {
56+
const queue = new CustomQueue();
57+
const memoSet = new Set();
58+
59+
if (amount === 0) return 0;
60+
61+
for (const coin of coins) {
62+
if (amount === coin) return 1;
63+
64+
queue.push(coin);
65+
memoSet.add(coin);
66+
}
67+
68+
let count = 1;
69+
70+
while (queue.size) {
71+
count++;
72+
let depthSize = queue.size;
73+
74+
while (depthSize--) {
75+
const sum = queue.pop();
76+
77+
for (const coin of coins) {
78+
const nextSum = sum + coin;
79+
80+
if (memoSet.has(nextSum)) continue;
81+
if (amount === nextSum) return count;
82+
if (amount > nextSum) queue.push(nextSum);
83+
84+
memoSet.add(nextSum);
85+
}
86+
}
87+
}
88+
89+
return -1;
90+
};

0 commit comments

Comments
 (0)