From 774b1a3b0fff895e09b8caad8ca423753ca1e3a0 Mon Sep 17 00:00:00 2001 From: Alessandro Cabassa <85694967+elcabalero@users.noreply.github.com> Date: Tue, 13 Dec 2022 21:08:51 +0100 Subject: [PATCH] Update coin_change_2.cpp --- .../coin_change_2.cpp | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/cpp/neetcode_150/14_2-d_dynamic_programming/coin_change_2.cpp b/cpp/neetcode_150/14_2-d_dynamic_programming/coin_change_2.cpp index 5e5bd0dba..f467823e6 100644 --- a/cpp/neetcode_150/14_2-d_dynamic_programming/coin_change_2.cpp +++ b/cpp/neetcode_150/14_2-d_dynamic_programming/coin_change_2.cpp @@ -7,7 +7,7 @@ Time: O(m x n) Space: O(m x n) */ - +/* class Solution { public: int change(int amount, vector& coins) { @@ -37,3 +37,47 @@ class Solution { return dp[{i, sum}]; } }; +*/ +// DP programming solution using a matrix +/* +class Solution { +public: + int change(int amount, vector& coins) { + vector> DP(coins.size() + 1, vector(amount+1)); + + for (int i = 0; i < coins.size() + 1; ++i) + DP[i][0] = 1; + + for (int i = 1; i <= coins.size(); ++i){ + for (int j = 0; j <= amount; ++j){ + DP[i][j] = DP[i-1][j]; + if (j - coins[i-1] >= 0) + DP[i][j] += DP[i][j - coins[i-1]]; + } + } + + return DP[coins.size()][amount]; + } +}; +// O(m) space solution +*/ +class Solution { +public: + int change(int amount, vector& coins) { + vector prev(amount+1); + vector curr(amount+1); + + prev[0] = 1; + + for (int i = 0; i < coins.size(); ++i){ + for (int j = 0; j <= amount; ++j){ + curr[j] = prev[j]; + if (j - coins[i] >= 0) + curr[j] += curr[j - coins[i]]; + } + prev = curr; + } + + return curr[amount]; + } +};