换钱的最小货币数

发布于 2023-12-30 21:59:07 字数 1584 浏览 12 评论 0

题目:给定数组 arrarr 中所有的值都为正数,每个值仅代表一张钱的面值,再给定一个整数 aim 代表要找的钱数,求组成 aim 的最少货币数目

解答

  • 空间压缩:将原要使用的二维数组压缩称为一维数组
  • 考虑
    • 初始值的设置:对于第一个钱采用是否可以使用作为初始值
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String mn = scanner.nextLine();
        Integer N = Integer.valueOf(mn);
        int []base = {3,5,6,12,4,2};
        System.out.println(getMinCoinOne(base,N));
    }

    private static int getMinCoinOne(int[] base, Integer n) {
        int length = base.length;
        // helper[i + 1]表示前 i 个前的最小货币数
        int []helper = new int[n + 1];
        int max = Integer.MAX_VALUE;
        for (int i = 1 ; i <= n; i ++){
            helper[i] = max;
        }
        if (base[0] <= n){
            // 决定第一个钱是否进行使用
            helper[base[0]] = 1;
        }
        int temp = 0;
        // 从第二个钱开始
        for (int i = 1 ; i < length; i ++){
            for (int j = n; j > 0; j --){
                temp = max;
                if (j - base[i] >= 0  && helper[j - base[i]] != max){
                    temp = helper[j- base[i]] + 1;
                }
                helper[j] = Math.min(helper[j],temp);
            }
        }
        return helper[n] != max ? helper[n] : -1;
    }

}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84960 人气
更多

推荐作者

13886483628

文章 0 评论 0

流年已逝

文章 0 评论 0

℡寂寞咖啡

文章 0 评论 0

笑看君怀她人

文章 0 评论 0

wkeithbarry

文章 0 评论 0

素手挽清风

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文