将给定的金额更改为最低数量的账单。
输入: 金额:正整数; 票据:不同正整数的排序列表(例如[1,5,10])。
假设: 金额不超过100。 最多4个账单值。
如果金额无法更改,则必须返回0。
实施例: 金额:17,账单:[1,5,10],答案:4 - > 10 + 5 + 1 + 1 金额:17,账单:[2,4],回答:0
这是我到目前为止的代码
function sort(array) {
for (var i = array.length - 1; i >= 0; i--) {
for (var j = 0; j < i; j++) {
if (array[j + 1] > array[j]) {
var z = array[j];
array[j] = array[j + 1];
array[j + 1] = z;
}
}
}
return array;
}
function change(amount, bills) {
sort(bills);
var result = [];
while (amount > 0) {
for (var i = 0; i < bills.length; i++) {
if (amount >= bills[i]) {
amount -= bills[i];
result.push(bills[i]);
i--;
}
}
}
return result.length;
}
console.log(change(17, [1, 5, 10])); // Expect: 4
console.log(change(17, [2, 4])); // Expect: 0
console.log(change(18, [2, 4])); // Expect: 5
//console.log(change(17, [3, 5])); // Expect: 5
&#13;
有两个问题 一个是如果金额不能分割,它不会返回0但只是滞后,因为它是一个无限循环。 第二个是在最后一个例子中,17,[3,5]我的代码花了5 3次,然后意识到它不能做其余的2并且延迟,而不是做3 4次并且添加5
非常感谢建议或固定代码。请保持相当简单我只是一个首发。
答案 0 :(得分:0)
如果修改了您的更改功能并添加了注释以解释我的更改,请告诉我您是否有任何疑问
function change (amount, bills) {
//Asign sorted array of bills to possibleBills
var possibleBills = sort(bills);
var result = [];
//Asign amount to currentAmount
var currentAmount = amount;
//Sort through possibleBills
for (var i = 0; i < possibleBills.length; i++) {
//Perform action inside while loop if the current bill value can be substracted from currentAmount
while (currentAmount - possibleBills[i] >= 0) {
currentAmount -= possibleBills[i];
result.push(possibleBills[i]);
//End loop and return the length of result if currentAmount reaches 0
if (currentAmount === 0) {
return result.length;
}
}
}
//Return 0 if the amount couldn't be changed with the given bills
if (currentAmount > 0) {
return 0;
}
return result.length;
};