零钱兑换

原题在这里

  经典题目就不多说题意了

1.记忆化广搜

code:

复制代码
class Solution
{
    struct ii
    {
        int x, y;
        ii(int a, int b) : x(a), y(b) {}
        friend bool operator<(ii a, ii b)
        {
            return a.y > b.y;
        }
    };

public:
    int coinChange(vector<int> &coins, int amount)
    {
        priority_queue<ii> q;
        q.push({amount, 0});
        vector<bool> vis(amount + 1, false);
        int l = coins.size();
        while (q.size())
        {
            ii n = q.top();
            q.pop();
            if (vis[n.x])
                continue;
            vis[n.x] = true;
            if (n.x == 0)
                return n.y;
            for (int i = l - 1; i >= 0; --i)
                if (n.x >= coins[i])
                    q.push({n.x - coins[i], n.y + 1});
        }
        return -1;
    }
};
复制代码

2.效率肯定更好的DP

因为很直观简洁,一看就懂(我还是想都没想)。

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

 

【Over】

posted @   Renhr  阅读(35)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
点击右上角即可分享
微信分享提示