Faaez Razeen

Coin Change

  • 3 min read
  • LC-Medium
  • Dynamic Programming

3 years ago

Solution

TimeSpaceExplanation
O(amount * len(coints))O(amount)space is from the dp array
function coinChange(coins: number[], amount: number): number { const dp = new Array(amount + 1).fill(amount + 1); dp[0] = 0; for (let amt = 1; amt <= amount; amt++) { for (let coin of coins) { const remaining = amt - coin; if (remaining >= 0) { dp[amt] = Math.min(dp[amt], 1 + dp[remaining]); } } } return dp[amount] === (amount + 1) ? -1 : dp[amount]; };

TLE Solution (Backtracking + DFS)

function coinChange(coins: number[], amount: number): number { let numCoins = Infinity; function backtrack(i: number, curNumCoins: number, curSum: number) { if (i === coins.length || curSum > amount || curNumCoins >= numCoins) { return; } if (curSum === amount) { numCoins = Math.min(numCoins, curNumCoins); return; } backtrack(i, curNumCoins + 1, curSum + coins[i]); backtrack(i + 1, curNumCoins, curSum); } backtrack(0, 0, 0); return numCoins === Infinity ? -1 : numCoins; };