322力扣:零钱兑换

DP:

cpp 复制代码
class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        int n=coins.size();
        vector<int> dp(amount+1,-1);
        dp[0]=0;
        for(int i=1;i<=amount;i++){
            for(int j=0;j<n;j++){
                if(i-coins[j]>=0 && dp[i-coins[j]]>=0){
                    int res=dp[i-coins[j]]+1;
                    if(dp[i]==-1 || dp[i]>res)
                    dp[i]=res;
                }
            }
        }
        return dp[amount];
    }
};

记忆化与回溯:

cpp 复制代码
class Solution {
public:
    int coinChange(vector<int>& coins, int amount) {
        vector<int> count(amount+1,0);
        function<int(int)> dfs=[&](int amount){
            int Min=INT_MAX;
            if(amount==0) return 0;
            if(amount<0) return -1;
            if(count[amount]!=0) return count[amount];
            for(auto num:coins){
                if(dfs(amount-num)==-1) continue;
                if(dfs(amount-num)<Min)
                Min=dfs(amount-num)+1;
            }
            count[amount]=Min==INT_MAX?-1:Min;
            return count[amount];
        };
        return dfs(amount);;
    }
};
相关推荐
诚丞成6 分钟前
滑动窗口篇——如行云流水般的高效解法与智能之道(1)
算法
带多刺的玫瑰2 小时前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
爱敲代码的憨仔2 小时前
《线性代数的本质》
线性代数·算法·决策树
yigan_Eins2 小时前
【数论】莫比乌斯函数及其反演
c++·经验分享·算法
阿史大杯茶2 小时前
AtCoder Beginner Contest 381(ABCDEF 题)视频讲解
数据结构·c++·算法
დ旧言~2 小时前
【高阶数据结构】图论
算法·深度优先·广度优先·宽度优先·推荐算法
张彦峰ZYF3 小时前
投资策略规划最优决策分析
分布式·算法·金融
The_Ticker3 小时前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
Lenyiin3 小时前
02.06、回文链表
数据结构·leetcode·链表
爪哇学长3 小时前
双指针算法详解:原理、应用场景及代码示例
java·数据结构·算法