Leetcode--322. 零钱兑换
给定不同面额的硬币 coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。
示例 1:
输入: coins = [1, 2, 5], amount = 11
输出: 3
解释: 11 = 5 + 5 + 1
示例 2:
输入: coins = [2], amount = 3
输出: -1
说明:
你可以认为每种硬币的数量是无限的。
思路:每一个数据都可以看做前面某一个dp[x]加上一个coins[i]的值,如果找不到这样的数字,那说明无法进行兑换
提交的代码:
class Solution {
public int coinChange(int[] coins, int amount) {
int i,j;
Arrays.sort(coins);
int n = coins.length;
int[] dp = new int[amount+1];
int min = Integer.MAX_VALUE;
dp[0] = 0;
if(amount==0)
{
return 0;
}
for(i=1;i<=amount;i++)
{
min = Integer.MAX_VALUE;
for(j=0;j<n;j++)
{
if(i-coins[j]>=0)
{
if(dp[i-coins[j]] != Integer.MAX_VALUE)
{
min = java.lang.Math.min(min, dp[i-coins[j]]+1);
}
}
else
{
break;
}
}
dp[i] = min;
}
if(dp[amount]!=Integer.MAX_VALUE)
{
return dp[amount];
}
else
{
return -1;
}
}
}
完整的代码:
import java.util.Arrays;
public class Solution322 {
public static int coinChange(int[] coins, int amount) {
int i,j;
Arrays.sort(coins);
int n = coins.length;
int[] dp = new int[amount+1];
int min = Integer.MAX_VALUE;
dp[0] = 0;
if(amount==0)
{
return 0;
}
for(i=1;i<=amount;i++)
{
min = Integer.MAX_VALUE;
for(j=0;j<n;j++)
{
if(i-coins[j]>=0)
{
if(dp[i-coins[j]] != Integer.MAX_VALUE)
{
min = java.lang.Math.min(min, dp[i-coins[j]]+1);
}
}
else
{
break;
}
}
dp[i] = min;
}
if(dp[amount]!=Integer.MAX_VALUE)
{
return dp[amount];
}
else
{
return -1;
}
}
public static void main(String[] args)
{
int[] coins = {186,419,83,408};
int amount = 6249;
System.out.println(coinChange(coins,amount));
}
}
Leetcode--322. 零钱兑换相关推荐
- leetcode: 322.零钱兑换
322.零钱兑换 来源:力扣(LeetCode) 链接: https://leetcode.cn/problems/coin-change/ 给你一个整数数组 coins ,表示不同面额的硬币:以及一 ...
- LeetCode 322. 零钱兑换(DP)
文章目录 1. 题目信息 2. 解题 2.1 回溯穷举 2.2 动态规划 1. 题目信息 给定不同面额的硬币 coins 和一个总金额 amount. 编写一个函数来计算可以凑成总金额所需的最少的硬币 ...
- golang力扣leetcode 322.零钱兑换
322.零钱兑换 322.零钱兑换 题解 代码 322.零钱兑换 322.零钱兑换 题解 //state: dp[i]金额为i时所需最少硬币个数 //function: dp[i]=dp[i-n]+1 ...
- Java实现 LeetCode 322 零钱兑换
322. 零钱兑换 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总金额,返回 -1. 示例 1: 输 ...
- [LeetCode] 322.零钱兑换 五种方法讲解
322.零钱兑换 五种方法讲解 文章目录 322.零钱兑换 五种方法讲解 1 问题描述 2 问题分析 3 解决策略 3.1 递归-暴力解决 3.2 递归-加入存储 3.3 BFS 3.4 动态规划-自 ...
- LeetCode 322. 零钱兑换
322. 零钱兑换 难度 中等 给你一个整数数组 coins ,表示不同面额的硬币:以及一个整数 amount ,表示总金额. 计算并返回可以凑成总金额所需的 最少的硬币个数 .如果没有任何一种硬币组 ...
- Leetcode.322 零钱兑换
索引iii表示 amountamountamount 金额,dp[i]dp[i]dp[i] 表示最少 coinscoinscoins 个数. 递归 class Solution {int res = ...
- Leetcode 322.零钱兑换
Time: 20190906 Type: Medium 题目描述 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币 ...
- leetcode 322. 零钱兑换 思考分析
目录 1.题目 2.思路分析 3.参考链接 1.题目 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总 ...
- 99. Leetcode 322. 零钱兑换 (动态规划-完全背包)
步骤一.确定状态: 确定dp数组及下标含义 dp数组是个amout+1的数组,dp[j]表示的是装满容量为j的背包所需要的最 少物品的个数 步骤二.推断状态方程: 对于当前物品i, 有两种选择决定了d ...
最新文章
- opencv python 中cv2.putText()函数的用法
- Winform中使用控件的Dock属性设计窗体布局,使不随窗体缩放而改变
- Hive JOIN使用详解
- SQL大圣之路笔记——PowerDesigner之新建table、view、proc
- MapReduce之二次排序
- jQuery.Validate.js验证大表单的优化
- markdown pad2注册码(2017年9月27日)
- C盘系统文件提示损坏怎么办?系统文件损坏怎么修复
- eact源码解析7.Fiber架构
- #荣耀双十一# 就是耀免单,年度旗舰任性送
- 股票数据API接口文档说明
- 【时间之外】面向监狱的编程?该学学网络安全法了(2)
- 学好单片机好找工作吗?单片机学到什么程度可以找工作?
- java spider爬虫_Java网络爬虫实操(2)
- 人物抠图 php,php抠图教程(混合模式+剪切蒙版)
- Android逆向之八门神器原理解析(主要分析其修改内存原理)
- ID 生成器 雪花算法
- 怎么更新服务器上的项目,更新服务器的项目
- java 指定打印机 进行打印
- SCL-90心理测试系统(基于c语言)
热门文章
- 程序员面试金典 - 面试题 10.05. 稀疏数组搜索(二分查找)
- LeetCode 1046. 最后一块石头的重量(priority_queue 堆)
- 动态规划应用--找零钱
- firefox应用自动全屏显示_【b】—自动化测试:基础selenium—API
- 协程asyncio_Asyncio深入浅出
- svr公式推导_ML-支持向量:SVM、SVC、SVR、SMO原理推导及实现
- 编php矩阵求和,PHP二维数组如何求和?
- 知识图谱入门知识(三)词性标注
- 论文浅尝 | KGAT: 用于推荐的知识图注意力网络
- 论文浅尝 - ICML2020 | 拆解元学习:理解 Few-Shots 任务中的特征表示