Skip to content

Commit 731f06e

Browse files
committed
feat: --
1 parent fea232c commit 731f06e

File tree

10 files changed

+248
-0
lines changed

10 files changed

+248
-0
lines changed

README.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,19 @@
1515

1616
欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个Star (此仓库每天都会准时更新)- vx联系: xiaoda0423
1717

18+
## ✔ 阶段二十一(475)
19+
20+
<details open>
21+
<summary>展开查看</summary>
22+
23+
- 471.[Promise](./阶段二十一/Promise.js)
24+
- 472.[413. 等差数列划分](./阶段二十一/等差数列划分.js)
25+
- 473.[377. 组合总和 Ⅳ](./阶段二十一/组合总和.js)
26+
- 474.[312. 戳气球](./阶段二十一/戳气球.js)
27+
- 475.[322. 零钱兑换](./阶段二十一/零钱兑换.js)
28+
29+
</details>
30+
1831
## ✔ 阶段二十(470)
1932

2033
<details open>

code/戳气球.js

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
312. 戳气球
5+
1 [3, 8]
6+
7+
[1,3,1,5,8,1]
8+
0 1 2 3 4 5
9+
-------
10+
- start
11+
-------- 1->5 有气球2 / 3 / 4 (k的可能值)
12+
(0,3)起始 结束 i->j 最后k
13+
dp[0][3][k] = dp[0][k] + dp[k][3] + nums[0] * nums[k] * nums[3]
14+
dp[i][j][k] = dp[i][k] + dp[k][j] + nums[i] * nums[k] * nums[j]
15+
// 遍历k 尝试 有气球就可以
16+
开区间
17+
dp[0][2][?]
18+
dp[0][5][?]
19+
20+
[3,1,5,8]
21+
0 1 2 3
22+
23+
dp[0][1] + nums[-1] * nums[2] * nums[len] + dp[3][3]
24+
25+
dp[0][1] ?
26+
dp[0][0]
27+
dp[1][1]
28+
dp[3][3] ?
29+
30+
dp[0][3][?] = Math.coin;
31+
*/
32+
var maxCoins = function(nums) {
33+
nums = [1, ...nums, 1];
34+
let len = nums.length;
35+
let dp = new Array(len).fill(0).map(_ => new Array(len).fill(0));
36+
for(let i = len - 3; i >= 0; i--) {
37+
for(let j = i + 2; j < len; j++) {
38+
//1->5 2 / 3 / 4
39+
for(let k = i + 1; k < j; k++) {
40+
dp[i][j] = Math.max(
41+
dp[i][j],
42+
dp[i][k] + dp[k][j] + nums[i] * nums[k] * nums[j]
43+
);
44+
}
45+
}
46+
}
47+
return dp[0][len-1];
48+
};
49+
50+

code/组合总和.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number}
5+
377. 组合总和 Ⅳ
6+
target = 4
7+
dp[4] 和为4的组合数
8+
dp[4] = dp[3]+1 + dp[2]+2 + dp[1]+3 + dp[0]+4
9+
[
10+
[1,1,1]
11+
[1,2]
12+
]
13+
输入:nums = [1,2,3], target = 4
14+
15+
d[4] = dp[3]+1 + dp[2]+2 + dp[1]+3 + dp[0]+4 (4没有出现)
16+
4 + 2 + 1 = 7
17+
d[3] = dp[2]+1 + dp[1]+2 + dp[0]+3
18+
2 + 1 + 1 = 4
19+
dp[2] = dp[1]+1 + dp[0]+2
20+
1 + 1 = 2
21+
dp[1] = dp[0]+1 // dp[1] = 1
22+
1 = 1
23+
dp[0] = 1
24+
25+
输入:nums = [1,2,3], target = 4
26+
27+
dp[4] = 4 + 2 + 1 = 7
28+
= dp[3] + dp[2] + dp[1] = 7
29+
dp[3] = 2 + 1 + 1 = 4
30+
= dp[2] + dp[1] + dp[0] = 4
31+
dp[2] = 1 + 1 = 2
32+
= dp[1] + dp[0] = 2
33+
dp[1] = 1
34+
= dp[0] = 1
35+
dp[0] = 1
36+
37+
38+
*/
39+
var combinationSum4 = function(nums, target) {
40+
let dp = new Array(target+1).fill(0);
41+
dp[0] = 1;
42+
for(let i = 1; i<=target; i++) {
43+
for(let j = 0; j < nums.length; j++) {
44+
if(i - nums[j] >= 0) {
45+
dp[i] += dp[i-nums[j]];
46+
}
47+
}
48+
}
49+
return dp[target];
50+
};
51+
52+
53+
File renamed without changes.

code/零钱兑换.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* @param {number[]} coins
3+
* @param {number} amount
4+
* @return {number}
5+
322. 零钱兑换
6+
coins = [1, 2, 5], amount = 11
7+
dp[11] = ?
8+
// 从左到右 dp[0] dp[1] dp[2] dp[3]
9+
i 总金额 最少的硬币个数
10+
dp[i] = Math.min(dp[i-coin] + 1, dp[i-coin] + 1...) // icon值
11+
dp[11] = dp[6] + (5) / dp[9] + (2) / dp[10] + (1)
12+
1 1 1
13+
总金额为6的硬币数量
14+
dp[6] dp[9] dp[10]
15+
dp[6] = dp[1] + (5) / dp[4] + (2) / dp[5] + (1)
16+
dp[1] dp[4] dp[5]
17+
dp[1] = dp[-4] + (5) / dp[-1] + (2) / dp[0] + 1
18+
dp[0] dp[i] >= 0
19+
*/
20+
var coinChange = function(coins, amount) {
21+
const dp = new Array(amount+1).fill(Infinity);
22+
dp[0] = 0;
23+
for (let i = 1; i <= amount; i++) {
24+
// dp[1] - dp[11]
25+
for (let coin of coins) {
26+
if (i - coin < 0) continue
27+
dp[i] = Math.min(dp[i], dp[i-coin] + 1)
28+
}
29+
}
30+
return dp[amount] === Infinity ? -1 : dp[amount]; // 硬币数量
31+
};

阶段二十一/Promise.js

Whitespace-only changes.

阶段二十一/戳气球.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
312. 戳气球
5+
*/
6+
var maxCoins = function(nums) {
7+
nums = [1, ...nums, 1];
8+
let len = nums.length;
9+
let dp = new Array(len).fill(0).map(_ => new Array(len).fill(0));
10+
for(let i = len - 3; i >= 0; i--) {
11+
for(let j = i + 2; j < len; j++) {
12+
for(let k = i + 1; k < j; k++) {
13+
dp[i][j] = Math.max(
14+
dp[i][j],
15+
dp[i][k] + dp[k][j] + nums[i] * nums[k] * nums[j]
16+
);
17+
}
18+
}
19+
}
20+
return dp[0][len-1];
21+
};
22+
23+

阶段二十一/等差数列划分.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
/**
2+
* @param {number[]} nums
3+
* @return {number}
4+
413. 等差数列划分
5+
dp[i]以i为结尾的等差子数组的个数
6+
索引
7+
123 234 1234
8+
[1,2,3]
9+
234 1234 // 34
10+
2345 12345 345
11+
[1,2,3,4,5,6]
12+
1 3 6 10
13+
123 // dp[2] 1
14+
234 1234 // dp[3] 2
15+
2345 12345 345 // dp[4] 3 6
16+
23456 123456 3456 456 // dp[5] 4 10
17+
*/
18+
var numberOfArithmeticSlices = function(A) {
19+
let len = A.length;
20+
let dp = new Array(len).fill(0);
21+
let ans = 0;
22+
for(let i = 2; i < len; i++) {
23+
if(A[i] - A[i-1] === A[i-1] - A[i-2]) {
24+
dp[i] = dp[i-1] + 1;
25+
ans += dp[i];
26+
}
27+
}
28+
return ans;
29+
};
30+
31+
// var numberOfArithmeticSlices = function(A) {
32+
// let ans = 0,
33+
// dp = new Array(A.length).fill(0);
34+
// for(let i = 2, ALen = A.length; i < ALen; i++) {
35+
// if(A[i]-A[i-1] === A[i-1]-A[i-2]) {
36+
// dp[i] = dp[i-1] + 1;
37+
// ans += dp[i];
38+
// }
39+
// }
40+
// return ans;
41+
// };

阶段二十一/组合总和.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number}
5+
377. 组合总和 Ⅳ
6+
*/
7+
var combinationSum4 = function(nums, target) {
8+
let dp = new Array(target+1).fill(0);
9+
dp[0] = 1;
10+
for(let i = 1; i<=target; i++) {
11+
for(let j = 0; j < nums.length; j++) {
12+
if(i - nums[j] >= 0) {
13+
dp[i] += dp[i-nums[j]];
14+
}
15+
}
16+
}
17+
return dp[target];
18+
};
19+
20+

阶段二十一/零钱兑换.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
/**
2+
* @param {number[]} coins
3+
* @param {number} amount
4+
* @return {number}
5+
322. 零钱兑换
6+
*/
7+
var coinChange = function(coins, amount) {
8+
const dp = new Array(amount+1).fill(Infinity);
9+
dp[0] = 0;
10+
for (let i = 1; i <= amount; i++) {
11+
for (let coin of coins) {
12+
if (i - coin < 0) continue
13+
dp[i] = Math.min(dp[i], dp[i-coin] + 1)
14+
}
15+
}
16+
return dp[amount] === Infinity ? -1 : dp[amount];
17+
};

0 commit comments

Comments
 (0)