您的位置:首页 > 其它

322. Coin Change

2016-03-14 23:52 330 查看








代码如下:

// CPP
class 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];
}
};


// JAVA
public 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];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: