File tree 1 file changed +17
-24
lines changed
1 file changed +17
-24
lines changed Original file line number Diff line number Diff line change @@ -8,6 +8,10 @@ let waysToChange = function (n) {
8
8
dp [ i ] = new Array ( n + 1 ) ;
9
9
}
10
10
11
+ for ( let i = 0 ; i < cl ; i ++ ) {
12
+ dp [ i ] [ 0 ] = 1
13
+ }
14
+
11
15
for ( let i = 0 ; i < dp . length ; i ++ ) {
12
16
for ( let j = 1 ; j <= n ; j ++ ) {
13
17
let coin = coins [ i ] ;
@@ -17,36 +21,25 @@ let waysToChange = function (n) {
17
21
18
22
// 考虑加上当前硬币
19
23
let pickCurrentAndPrev = 0 ;
20
- if ( j > coin && dpPrev ) {
24
+ if ( j >= coin ) {
21
25
// 用了当前的硬币以后 剩余的面值
22
- let duplicate = 1
23
- while ( coin * duplicate < j ) {
24
- let rest = j - coin * duplicate
25
- let pickRest = dpPrev [ rest ] ;
26
- if ( pickRest > 0 ) {
27
- // 这个方式数其实就是凑剩余硬币的方式数
28
- // 比如 以硬币5和面值10来说
29
- // 拿出了5 发现剩余面值是5
30
- // 凑剩余面值5的情况是 5 + 11111
31
- // 所以拿出5来凑的方式是1种
32
- pickCurrentAndPrev += pickRest ;
33
- }
34
-
35
- duplicate ++
26
+ let rest = j - coin ;
27
+ let pickRest = dp [ i ] [ rest ] ;
28
+ if ( pickRest > 0 ) {
29
+ // 这个方式数其实就是凑剩余硬币的方式数
30
+ // 比如 以硬币5和面值10来说
31
+ // 拿出了5 发现剩余面值是5
32
+ // 凑剩余面值5的情况是 5 + 11111
33
+ // 所以拿出5来凑的方式是1种
34
+ pickCurrentAndPrev = pickRest ;
36
35
}
37
36
}
38
37
39
- let pickOnlyCurrnet = 0 ;
40
- if ( j >= coin ) {
41
- // 除后没有余数 说明是可以只用当前硬币的
42
- // 比如用5凑5 5+5来凑10 用5+5+5凑15
43
- pickOnlyCurrnet = j % coin === 0 ? 1 : 0 ;
44
- }
45
-
46
- dp [ i ] [ j ] = ( pickPrev + pickCurrentAndPrev + pickOnlyCurrnet ) % 1000000007 ;
38
+ dp [ i ] [ j ] = ( pickPrev + pickCurrentAndPrev ) % 1000000007 ;
47
39
}
48
40
}
41
+
49
42
return dp [ cl - 1 ] [ n ] ;
50
43
} ;
51
44
52
- console . log ( waysToChange ( 61 ) ) // 73
45
+ console . log ( waysToChange ( 61 ) ) ; // 73
You can’t perform that action at this time.
0 commit comments