322. Coin Change

来源:互联网 发布:网络推广考核 编辑:程序博客网 时间:2024/06/14 04:21

代码如下:

// CPPclass Solution {public:    int coinChange(vector<int>& coins, int amount) {        if (amount == 0) {            return 0;        }        // 初始化数组为 0,并将已有钱数置为 1         // initialized vector f with 0 then fill the coin value as 1        vector<int> f(amount + 1, 0);        for (int i = 0; i < coins.size(); ++i) {            if (coins[i] <= amount) {                f[coins[i]] = 1;            }        }        // 在能够凑出钱数目的基础上,计算出新的可凑出的钱数,并更新其需要的张数         // for every value which can be added up to, calculate new value and refresh new value's times        for (int pos = 0; pos <= amount; ++pos) {            if (f[pos] == 0) {                continue;            }            for (int i = 0; i < coins.size(); ++i) {                int value = pos + coins[i];                if (value <= amount) {                    f[value] = (f[value] == 0) ?                        (f[pos] + 1) : min(f[value], f[pos] + 1);                }            }        }        return (f[amount] == 0) ? -1 : f[amount];    }};

// JAVApublic class Solution {    public int coinChange(int[] coins, int amount) {        if (amount == 0) {            return 0;        }        int[] f = new int[amount + 1];        for (int i = 0; i < coins.length; ++i) {            if (coins[i] <= amount) {                f[coins[i]] = 1;            }        }        for (int pos = 0; pos <= amount; ++pos) {            if (f[pos] == 0) {                continue;            }            for (int i = 0; i < coins.length; ++i) {                int value = pos + coins[i];                if (value <= amount) {                    f[value] = (f[value] == 0) ?                        (f[pos] + 1) : Math.min(f[value], f[pos] + 1);                }            }        }        return (f[amount] == 0) ? -1 : f[amount];    }}


0 0
原创粉丝点击