Skip to content

Commit b71f217

Browse files
committed
添加动态规划
1 parent edd7924 commit b71f217

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

动态规划/dynamic.js

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
// 有3种硬币面值分别为 2, 5,7
2+
// 给定目标27,求使用最少的组合搭配出27
3+
// 7 7 7 + 2 2 2 ==》 6
4+
5+
const dp = {}
6+
const findMinNums = (x) => {
7+
if (dp[x]) return dp[x]
8+
if (x <= 0) return x;
9+
let res = Number.MAX_VALUE;
10+
if (x >= 2) {
11+
res = Math.min(res, findMinNums(x - 2) + 1)
12+
}
13+
if (x >= 5) {
14+
res = Math.min(res, findMinNums(x - 5) + 1)
15+
}
16+
if (x >= 7) {
17+
res = Math.min(res, findMinNums(x - 7) + 1)
18+
}
19+
dp[x] = res
20+
return res
21+
}
22+
const findMinNums2 = (A, x) => {
23+
const dp = [];
24+
dp[0] = 0;
25+
for(let i = 1; i < x; i ++){
26+
dp[i] = Number.MAX_VALUE
27+
for(let j = 0; j < A.length; j ++){
28+
if( i < A[j] || dp[ i - A[j] ] == Number.MAX_VALUE) continue;
29+
dp[i] = Math.min(dp[i], dp[ i - A[j] ] + 1)
30+
}
31+
}
32+
return dp[x - 1 ]
33+
}
34+
35+
function test(m, n) {
36+
const dp = [];
37+
dp[0] = [1];
38+
for (let i = 0; i < m; i++) {
39+
for (let j = 0; j < n; i++) {
40+
if (i === 0 || j === 0) {
41+
console.log(dp[i],i,j)
42+
dp[i][j] = 1;
43+
}
44+
else dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
45+
}
46+
}
47+
48+
return dp[m - 1][n - 1]
49+
}
50+
console.time()
51+
console.log(findMinNums2([2,5,7],27))
52+
console.timeEnd()
File renamed without changes.

0 commit comments

Comments
 (0)