LeetCode 322. Coin Change

LeetCode 322 Coin Change (python) 目录LeetCode 322 Coin Change (python)分析状态定义状态转移Code欢迎一起来参与leetcode刷题项目 LeetCode 322 Coin Change (python) 分析 这题本质上是一个完全背包问题,我们有给定面额的货币,用它们得到一个金额,每种面额的货币使用数量不限。很明显了,完全背包 状态定义 既然是背包问题,现在再来看看怎么定义状态。依然很明显。==... 阅读详情


General DP question.

#include <vector>
#include <iostream>
#include <climits>
using namespace std;

/*
  You are given coins of different denominations and a total amount of money amount.
  write a function to compute the fewest number of coins that you need to make up
  the amount. If that amount of money cannot be made up by any combination of the coins.
  return -1.
  Example:
  coins = [1, 2, 5], amount = 11
  return 3 (11 == 5 + 5 + 1)
  coins = [2], amount = 3;
  return -1;
*/

int coinChange(vector<int>& coins, int amount) {
  vector<int> dp(amount+1, INT_MAX);  // this initialize is very important. since some value can't be exchanged.
  dp[0] = 0;
  for(int i = 1; i <= amount; ++i) {
    for(int j = 0; j < coins.size(); ++j) {
      if(i - coins[j] >= 0) {
        int sub_res = dp[i-coins[j]];
        if(sub_res != INT_MAX && sub_res + 1 < dp[i]) dp[i] = sub_res + 1;
      }
    }
  }
  if(dp[amount] == INT_MAX) return -1;
  return dp[amount];
}

int main(void) {
  vector<int> coins{2, 5};
  cout << coinChange(coins, 8) << endl;
  cout << coinChange(coins, 3) << endl;
}

// Variations.
// Get the total number of coin exchanges to the whole sum.
// number of ways combinations.
// table[i][j] == table[i][j] + table[i][j-coins[k]];
int coinCombinations(int sum, vector<int>& coins) {
  int n = coins.size();
  vector< vector<int> > table(sum + 1, vector<int>(n, 0));
  for(int i = 0; i < n; ++i) {
    table[0][i] = 1;
  }
  for(int i = 1; i <= sum; ++i) {
    for(int j = 0; j < n; ++j) {
      int x = (i - coins[j] >= 0) ? table[i - coins[j]][j] : 0;
      int y = (j >= 1) ? table[i][j-1] : 0;
      table[i][j] = x + y;
    }
  }
  return table[sum][n - 1];
}

// To further optimize,
 int exchange(vector<int>& coins, int sum) {
  vector<int> dp(sum + 1, 0);
  dp[0] = 1;
  int n = coins.size();
  for(int i = 0; i < n; ++i) {
    for(int j = coins[i]; j <= sum; ++j) {
      dp[j] += dp[j - coins[i]];
    }
  }
  return dp[sum];
}

Another variation:

Given a non-negative number n, find out how many ways n can be made by summing up non-negative integers.

int waysSum(int n) { // these are all backpacking series problems.
  vector< vector<int> > dp(n + 1, vector<int>(n + 1, 0));
  for(int j = 0; j < n; ++j) {
    dp[0][j] = 1;
  }

  for(int i = 0; i <= n; ++i) {
    for(int j = 1; j <= n; ++j) {
      // do not include j.
      dp[i][j] = dp[i][j-1];
      if(i - j >= 0) {
        dp[i][j] += dp[i-j][j];
      }
    }
  }
  return dp[n][n];
}

int main(void) {
  cout << waysSum(2) << endl;
}


LeetCode刷题:322. Coin Change LeetCode刷题:322. Coin Change 原题链接:https://leetcode.com/problems/coin-change/ You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest ... 阅读详情

相关推荐

leetcode: 322.零钱兑换

如果没有任何一种硬币组合能组成总金额,返回 -1。其实最好的解决办法是使用动态规划,这里不做过多的详述。,表示不同面额的硬币;计算并返回可以凑成总金额所需的。来源:力扣(LeetCode)...

uncle_ll的博客 1304

Leetcode.322-零钱兑换(最大/小型动态规划)

动态规划适用于:最大/小值,可不可行,计数问题这类集中场景本题,求解是否可以由指定面值的硬币完成兑换且统计最少需要的硬币的数量,可以使用动态规划来求解。动态规划。

weixin_52199109的博客 1871

IAR编译相同工程生产hex文件checksum不一致问题

IAR Checksum

xqw19891201的博客 1382

LeetCode 322. 零钱兑换

322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。 示例1: 输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2: 输入: coins = [2], amount = 3 输出: -1 说明: 你可以认为每种硬币的数量是无限的。 链接:https://leetcode-c...

梦~' 3953

OpenModelica入门指南:从下载安装到第一个仿真模型(附常见问题解答)

本文提供OpenModelica开源项目的完整入门指南,涵盖从下载安装、界面熟悉到构建首个仿真模型的全过程。通过创建经典的阻尼震荡系统实例,详细讲解组件拖放、参数设置、仿真运行及结果分析,并附有常见问题解决方案,帮助工程师和研究人员快速上手这一强大的多领域物理系统建模与仿真工具。

weixin_29239279的博客 724

基于STM32的智能工业机器人臂控制系统

工业机器人臂是智能制造的核心组件,广泛应用于装配、焊接、搬运等任务。基于STM32微控制器的机器人臂控制系统,通过集成伺服电机驱动、运动规划算法和实时通信功能,实现对多轴机械臂的精确控制与路径规划。本设计通过STM32实现了一套智能工业机器人臂控制系统,集成了高效的运动规划算法和实时控制功能。机器人臂系统根据输入的目标位置(如工件坐标),通过运动学计算生成动作轨迹,利用伺服电机驱动器控制关节运动。该系统广泛应用于工业自动化场景,如汽车制造中的零件装配、电子产品生产中的元件焊接以及物流系统中的物料搬运。

stm32d1219的博客 2567

【LeetCode】动态规划—322. 零钱兑换(附完整Python/C++代码)

零钱兑换 是一个经典的 动态规划 问题。给定一个整数数组 coins,其中每个元素代表不同面额的硬币,再给定一个整数 amount,表示需要凑成的总金额,要求计算出用这些硬币凑成该金额的最少硬币数量。如果凑不出该金额,则返回 -1。

Albert_Lsk的博客 1987

(数字ic验证)从零开始的apb_watchdog验证模块搭建(一、功能介绍与环境搭建)

apb_watchdog验证模块搭建(一)文章目录 文章目录apb_watchdog验证模块搭建(一)文章目录前言一、apb_watchdog简单功能介绍二、测试平台环境搭建1.测试所用模板介绍2.tb与interface2.env与watchdog_pkg3.test与base_sequence4.Makefile总结——当前验证结构 前言 本文介绍了apb_watchdog验证模块的搭建过程与其具体代码,主要包括其中验证环境的构建,测试序列的发送与回归测试收集。主要运用systemvorilog与u

peop1e的博客 9736

leetcode322 零钱兑换

给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回-1。 示例1:输入: coins = [1, 2, 5], amount = 11 输出: 3 解释: 11 = 5 + 5 + 1 示例 2:输入: coins = [2], amount = 3 输出: -1 我们...

斜月&三星 445

使用 MATLAB/Simulink 构建一个基于PID控制的直流电机速度调节系统模型

直流电机(DC Motor)因其结构简单、成本低廉、易于控制等特点,广泛应用于各种工业自动化和家用电器中。PID控制器作为最常用的控制策略之一,在直流电机的速度调节系统中具有重要应用价值。通过合理调整比例(P)、积分(I)、微分(D)三个参数,可以实现对电机速度的精确控制。本教程将带你使用构建一个基于PID控制的直流电机速度调节系统模型,涵盖电机模型构建、PID控制器设计、系统仿真与调试等多个方面。本文介绍了如何使用构建一个基于PID控制的直流电机速度调节系统模型。

amy_mhd的博客 217

SIMULINK开发项目实例 1000 例专栏之第912例--AC-DC整流器场景:基于PWM整流器拓扑结构的建模:三相电压型PWM整流器(SR)单位功率因数控制仿真

本文详细介绍了使用Simulink和Simscape Electrical搭建三相电压型PWM整流器(VSR)模型的方法。主要内容包括:系统结构设计、主电路拓扑搭建、单位功率因数控制算法实现(含PLL锁相环、dq变换、PI控制器等模块)、参数配置和仿真设置。通过仿真分析验证了该系统能实现输入电流与电压同相位、输出直流电压稳定等特性,体现了PWM整流器的高效性和低谐波优势。文章还提出了增强鲁棒性、多工况测试等优化建议,为电力电子系统设计提供了实用指导。该建模方法对新能源发电、电动汽车充电等领域具有重要意义。

xiaoheshang_123的博客 7797

LeetCode 322. Coin Change 题解

本题是动态规划的经典应用问题,主要考察对动态规划思想的理解和使用。通过使用动态规划,我们可以高效地计算凑成总金额所需的最少硬币个数。动态规划的核心思想是:定义一个数组dp,其中dp[i]表示凑成金额i所需的最少硬币个数,然后遍历每个金额,更新dp数组。这种方法不仅适用于硬币兑换问题,还可以应用于许多其他类似的问题,例如完全背包问题。掌握动态规划的思想,对于解决这类问题非常重要。

cannonjinx的博客 4376

[QMT量化交易小白入门]-十二、QMT回测龙头打首板和连板的策略

class a():passA = a() #创建空的类的实例 用来保存委托状态field_list定义了需要的市场数据字段,而类a用于保存交易状态。

木头大左的博客 4757

leetcode题集: 322. Coin Change

实在是太懒了,写博客真的懒得写。今天就一起写几篇动态规划的好了 第9题:322.Coin Change 题目大意:就是换零钱!给出可换的零钱种类,求最后换得零钱的最小张数(coin的个数),每种可换的零钱数目无限。 题目分析:思路很明确,就是找零钱从最大的开始找呗,依次找当前可换的最大数额的零钱,显然可以用动态规划的思想解决,是一个很简单的动态规划问题,状态转移方程: ...

wx_14678的博客 245

PCL 中实现平面模型分割【2026最新版】

RANSAC分割平面。博客长期更新,最近一次更新时间为:2026年5月4日。

点云侠的博客 38万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Leetcode322. Coin Change-动态规划

Leetcode322. Coin ChangeLeetcode322. Coin Change题目思路回头看的最佳选择复杂度代码 Leetcode322. Coin Change 题目 题目链接 思路 将目标数额记为amount,拥有的面值包含在coins中 从1到amount,每个数额都至少由一个coin组成,那剩下的是left = amount-coin,left的计算也由同样方式得出 如amount=10,coins = [1, 2, 5]: 10可以由9+1,8+2,5+5组成,那么在这三个中,取

qq_17065591的博客 408

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

leetcode 322. Coin Change

一、题意 给你一个整数数组 coins ,表示不同面额的硬币;以及一个整数 amount ,表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额,返回 -1 。 你可以认为每种硬币的数量是无限的。 二、解法 解法: 动态规划 dp[i]表示金额为i的最少需要的硬币有多少个 dp[i]=min(dp[i],dp[i-coins[j]]+dp[coins[j]]),dp[i]>0。从1开始到i求dp[i],就可以将i之间的结果都求好,dp[i]即为结果。 时

Genius_J的博客 438

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

leetcode学习笔记322 Coin Change

leetcode学习笔记322问题思考方法1 问题 Coin Change You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of money cannot be made up

kuma的博客 180

Leetcode 322. Coin Change (Medium) (cpp)

Leetcode 322. Coin Change (Medium) (cpp)

还是需要多学习!闷声大发财,这是坠吼的! 843

LeetCode-322. Coin Change [C++][Java]

Returnthe fewest number of coins that you need to make up that amount. If that amount of money cannot be made up by any combination of the coins, return-1.

贫道绝缘子的博客 530

每周LeetCode算法题(十一) 题目: 322. Coin Change

每周LeetCode算法题(十一)题目: 322. Coin Change You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make

JacKnights的博客 410

LeetCode练习题322. Coin Change

题目 You are given coins of different denominations and a total amount of money amount. Write a function to compute the fewest number of coins that you need to make up that amount. If that amount of mo...

看门猫的博客 238
上一篇: LeetCode 246. Strobogrammatic Number
下一篇: LeetCode 243. Shortest Word Distance
ActiveCoder
博客等级 码龄11年 4粉丝 345原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值