凑成n元最少需要多少硬币

有面值分别为1,3,5的三种硬币若干,凑成n元最少需要多少硬币?

/**
 * 有面值分别为1,3,5的三种硬币若干,凑成n元最少需要多少硬币?
 */
public class Coins {

    public static void main(String[] args) {
        int[] coins = {1, 3, 5};
        System.out.println(minCoinNum(coins, 10));
    }

    private static int minCoinNum(int[] coins, int n) {
        //组成n元最小需要的金币数
        //coins={1,3,5}
        int[] coinMinNum = new int[n + 1];//下标代表n元,int[n]代表组成n元要用的最少金比数
        for (int t = 0; t < coinMinNum.length; t++) {
            coinMinNum[t] = Integer.MAX_VALUE;
        }
        coinMinNum[0] = 0;
        for (int i = 1; i < n + 1; i++) {
            //找出(i-vj)中最小的
            int minTem = coinMinNum[i];
            for (int coin : coins) {
                if (i - coin >= 0 && coinMinNum[i - coin] + 1 < minTem) {
                    minTem = coinMinNum[i - coin] + 1;
                }
            }
            coinMinNum[i] = minTem;

        }
        
        return coinMinNum[n];
    }
}


版权声明:本文为Winmusic原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。