将给定的金额更改为账单

时间:2017-02-26 19:33:52

标签: javascript function coin-change

将给定的金额更改为最低数量的账单。

输入: 金额:正整数; 票据:不同正整数的排序列表(例如[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;
&#13;
&#13;

有两个问题 一个是如果金额不能分割,它不会返回0但只是滞后,因为它是一个无限循环。 第二个是在最后一个例子中,17,[3,5]我的代码花了5 3次,然后意识到它不能做其余的2并且延迟,而不是做3 4次并且添加5

非常感谢建议或固定代码。请保持相当简单我只是一个首发。

1 个答案:

答案 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;
};