File tree Expand file tree Collapse file tree 2 files changed +43
-0
lines changed
dynamic-programming/patterns-dynamic-programming/02-unbounded-knapsack Expand file tree Collapse file tree 2 files changed +43
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution :
2+ def coinChange (self , coins : List [int ], amount : int ) -> int :
3+ n = len (coins )
4+ dp = [[float ('inf' ) for _ in range (amount + 1 )] for _ in range (n + 1 )]
5+
6+ for i in range (n + 1 ):
7+ dp [i ][0 ] = 0
8+
9+ for i in range (n + 1 ):
10+ for j in range (amount + 1 ):
11+ if coins [i - 1 ] > j :
12+ dp [i ][j ] = dp [i - 1 ][j ]
13+ else :
14+ dp [i ][j ] = min (1 + dp [i ][j - coins [i - 1 ]], dp [i - 1 ][j ])
15+
16+ return dp [n ][amount ] if dp [n ][amount ] != float ('inf' ) else - 1
17+
18+ # optimized solution
19+ class Solution2 :
20+ def coinChange (self , coins : List [int ], amount : int ) -> int :
21+ dp = [float ('inf' ) for _ in range (amount + 1 )]
22+ dp [0 ] = 0
23+ for coin in coins :
24+ for i in range (amount - coin + 1 ):
25+ dp [i + coin ] = min (dp [i + coin ], dp [i ]+ 1 )
26+ return dp [amount ] if dp [amount ] != float ('inf' ) else - 1
Original file line number Diff line number Diff line change 1+ class Solution :
2+ def change (self , amount : int , coins : List [int ]) -> int :
3+ n = len (coins )
4+ dp = [[0 for _ in range (amount + 1 )] for _ in range (n + 1 )]
5+
6+ for i in range (n + 1 ):
7+ dp [i ][0 ] = 1
8+
9+ for i in range (1 , n + 1 ):
10+ for j in range (amount + 1 ):
11+ if j >= coins [i - 1 ]:
12+ dp [i ][j ] = dp [i ][j - coins [i - 1 ]] + dp [i - 1 ][j ]
13+ else :
14+ dp [i ][j ] = dp [i - 1 ][j ]
15+
16+ return dp [n ][amount ]
17+
You can’t perform that action at this time.
0 commit comments