经典题 - 凑硬币

问题

现有面额为1元,3元,5元的硬币若干枚,如何用最少的硬币凑够11元?

拓展

保证各种面额的硬币数足够多,如何用最少的硬币凑够n元?

Java Code

//版本一:递归求解动态规划问题
public int minCoins(int n) {
    switch(n) {
        case 0: return 0;
        case 1: return 1;//面额依次为:1
        case 2: return 2;//面额依次为:1,1
        case 3: return 1;//面额依次为:3,
        case 4: return 2;//面额依次为:1,3
        case 5: return 1;//面额依次为:5
    }

    return Math.min(Math.min(minCoins(n-1), minCoins(n-3)), minCoins(n-5)) + 1;     
}

//版本二:递推求解动态规划问题
public int minCoins2(int n) {
    //数组minTable保存每一种总面额下需要的最少硬币数量
    int[] minTable = new int[n+1];
    minTable[0] = 0;
    minTable[1] = 1;
    minTable[2] = 2;
    minTable[3] = 1;
    minTable[4] = 2;
    minTable[5] = 1;

    for(int i=6; i < minTable.length; ++i)
        minTable[i] = Math.min(Math.min(minTable[i-1], minTable[i-3]), minTable[i-5]) + 1;

    return minTable[n]; 
}

你可能感兴趣的:(动态规划,硬币)