# [322\. Coin Change](https://leetcode.com/problems/coin-change/) :::spoiler Solution ```cpp= class Solution { public: int coinChange(vector<int>& coins, int amount) { vector<int> dp(amount + 1, amount + 1); dp[0] = 0; for (int i = 1; i <= amount; ++i) { for (auto coin : coins) { if (coin <= i) { dp[i] = min(dp[i], dp[i - coin] + 1); } } } return dp[amount] == amount + 1 ? -1 : dp[amount]; } }; ``` - T: $O(S \cdot N)$ - S: $O(S)$ ::: :::spoiler Solution ```cpp= class Solution { public: int coinChange(vector<int>& coins, int amount) { vector<int> dp(amount + 1, amount + 1); dp[0] = 0; for (auto& coin : coins) { for (int i = coin; i <= amount; i++) { dp[i] = min(dp[i], dp[i - coin] + 1); } } return dp[amount] == amount + 1 ? -1 : dp[amount]; } }; ``` - T: $O(S \cdot N)$ - S: $O(S)$ :::