【发布时间】:2018-08-01 13:15:22
【问题描述】:
今天我来帮助你优化一些代码!
几周前,我被要求在测试中解决一个问题,因为我开始学习 Javascript,所以我想出了这个非最佳解决方案。
我想知道是否有办法(当然有)让这变得更好。
情况如下:
“我是一个特别善良的人,拥有无限量的 2 美元、5 美元和 10 美元的钞票,我愿意为任何想要它的人兑换现金,但以最有效的方式,用最少的账单。”
由于我必须返回一个带有钞票数量的对象(如果小于 2 美元,则返回 null),我给出了以下解决方案:
function giveChange(change){
var two = 0;
var five = 0;
var ten = 0;
var changeToGo = change;
while(changeToGo >= 11){
changeToGo -=10;
ten+=1;
}
while(changeToGo >=7 && changeToGo <=11){
changeToGo-=5;
five+=1;
}
while(changeToGo >=2 && changeToGo <=6 ){
if(changeToGo == 5){
changeToGo -=5;
five+=1;
}
else{
changeToGo -= 2;
two+=1;
}
}
if (change < 2){
return null;
}
return {
two: two,
five: five,
ten: ten
};
}
我认为必须有一个聪明和更优雅的解决方案(可能使用 mod% 或其他东西),但那个怪物是我当时能够实现的哈哈哈。
有什么想法吗?
【问题讨论】:
-
对不起,我不得不重写函数,因为我记得在飞行中,该函数在测试版本上工作,这只是一个错字。 (现在正在编辑)。
-
大多数开发人员可能会使用模数运算符。 developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
-
好吧。最佳(和一般)解决方案与分区有关,这是一个难题。在接下来的几天里,我将尝试提供一个优雅的解决方案。这条评论让我记住
-
我们如何在这种情况下使用模数?另外,我问的是效率,因为在非常大的数字中,我最终使用了很多内存,而这在测试中是不允许的,我不得不做一个非常丑陋的技巧来解决这个问题。
标签: javascript function oop object