-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathstructy-075-minChange-2.js
54 lines (41 loc) · 1.19 KB
/
structy-075-minChange-2.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// p: num, arr
// r: num
// e:
// minChange(13, [1, 9, 5, 14, 30]); // -> 5
// 13
// (1 9 5 14 30)
// 12 4 8 -1 -27
// (1 9 5 14 30)
const minChange = (amount, coins) => {
let min = findMin(amount, coins);
return min === Infinity ? -1 : min;
};
// recursion W memo O(coins.length x amount) O(amount)
const findMin = (amount, coins, memo = {}) => {
if (amount < 0) return Infinity;
if (amount === 0) return 0;
if (amount in memo) return memo[amount];
let min = Infinity;
for (let coin of coins) {
min = Math.min(min, 1 + findMin(amount - coin, coins, memo));
}
memo[amount] = min;
return min;
};
// // recursion WO memo O(coins.length^amount) O(amount) ?
// const findMin = (amount, coins) => {
// if (amount < 0) return Infinity;
// if (amount === 0) return 0;
// let min = Infinity;
// for (let coin of coins) {
// min = Math.min(min, 1 + findMin(amount - coin, coins));
// }
// return min;
// }
// console.log(minChange(3, [4, 2, 10])); // -> -1
// console.log(minChange(8, [1, 5, 4, 12])); // -> 2
console.log(minChange(13, [1, 9, 5, 14, 30]));
// -> 5
// module.exports = {
// minChange,
// };