File tree Expand file tree Collapse file tree 1 file changed +17
-24
lines changed Expand file tree Collapse file tree 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) {
88 dp [ i ] = new Array ( n + 1 ) ;
99 }
1010
11+ for ( let i = 0 ; i < cl ; i ++ ) {
12+ dp [ i ] [ 0 ] = 1
13+ }
14+
1115 for ( let i = 0 ; i < dp . length ; i ++ ) {
1216 for ( let j = 1 ; j <= n ; j ++ ) {
1317 let coin = coins [ i ] ;
@@ -17,36 +21,25 @@ let waysToChange = function (n) {
1721
1822 // 考虑加上当前硬币
1923 let pickCurrentAndPrev = 0 ;
20- if ( j > coin && dpPrev ) {
24+ if ( j >= coin ) {
2125 // 用了当前的硬币以后 剩余的面值
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 ;
3635 }
3736 }
3837
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 ;
4739 }
4840 }
41+
4942 return dp [ cl - 1 ] [ n ] ;
5043} ;
5144
52- console . log ( waysToChange ( 61 ) ) // 73
45+ console . log ( waysToChange ( 61 ) ) ; // 73
You can’t perform that action at this time.
0 commit comments