File tree Expand file tree Collapse file tree 10 files changed +248
-0
lines changed Expand file tree Collapse file tree 10 files changed +248
-0
lines changed Original file line number Diff line number Diff line change 15
15
16
16
欢迎大家前来讨论,如果觉得对你的学习有一定的帮助,欢迎点个Star (此仓库每天都会准时更新)- vx联系: xiaoda0423
17
17
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
+
18
31
## ✔ 阶段二十(470)
19
32
20
33
<details open >
Original file line number Diff line number Diff line change
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
+
Original file line number Diff line number Diff line change
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.
Original file line number Diff line number Diff line change
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
+ } ;
Original file line number Diff line number Diff line change
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
+
Original file line number Diff line number Diff line change
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
+ // };
Original file line number Diff line number Diff line change
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
+
Original file line number Diff line number Diff line change
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
+ } ;
You can’t perform that action at this time.
0 commit comments