1 问题描述
现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < … < dm的硬币?(PS:假设这m种面值d1 < d2 < d3 < … < dm的硬币,其中d1 = 1,且每种硬币数量无限可得)
2 解决方案
2.1 动态规划法
本文编码思想参考自《算法设计与分析基础》第三版,具体讲解如下:
package com.liuzhen.chapter8;
public class ChangeMaking {
public void getChangeMakingN(int[] coinType,int n){
int[] minNumber = new int[n+1]; //初始化后,所有元素均为0,其中minNumber[0] = 0,表示无须找零
int[] tempMinJ = new int[n+1]; //tempMinJ[0]在此处无含义
for(int i = 1;i <= n;i++){
int j = 0;
int tempJ = -1; //用于h获取minNumber[i]