换硬币 c++

换硬币

写在前面,小白从零刷题,在解答会写出思路,正确答案,以及所有使用到的语法和知识点

1.dp

  • 如何想到?
  1. 求最小值
  • 解题步骤
  1. 456

class Solution {
     
public:
    int coinChange(vector<int> &coins, int amount) {
     
        const int INF = 0x3f3f3f3f;//定义INF为一个极大值
        vector<int>dp(amount+1,INF);
        dp[0] = 0;   // 初始化0
        for (int i = 1; i <= amount; i++) {
     
            for (auto &coin : coins) {
     
                if (i >= coin && dp[i - coin] != INF) {
     //子答案必须有解
                    dp[i] = min(dp[i], dp[i - coin] + 1);
                }
            }
        }
        // 如果不存任意的方案 返回-1
        return dp[amount] == INF ? -1 : dp[amount];
    }
};

时间复杂度/空间复杂度分析/面试场景如何作答

  • 面试官不同要求下的解题方式

  • 方法一时间空间复杂度

  1. 时间复杂度:
  2. 空间复杂度:

知识点及反思

你可能感兴趣的:(lintcode,c++,算法,数据结构)