【发布时间】:2017-04-02 14:37:48
【问题描述】:
我正在处理这个函数,它必须返回添加 a 和 b n 次的所有可能值,例如如果 n = 1 那么可能的值将是 a + a a + b 和 @987654327 @。下面的功能有效,但它太慢了,我想优化它。有什么建议?非常感谢!
function processData(n, a, b){
var ans = [0];
for(var i = 0; i < n; i++){
var temp = [];
for(var j = 0; j < ans.length; j++){
var aa = ans[j] + a;
if(temp.includes(aa) === false){
temp.push(aa);
}
var bb = ans[j] + b;
if(temp.includes(bb) === false){
temp.push(bb);
}
}
ans = temp;
}
ans.sort(function(a, b){return a - b});
return ans;
}
【问题讨论】:
-
你能举出n=0和n=2的例子吗?
-
如果
n=0那么没有什么可做的,如果n=2那么你在n===1之后得到了什么加上a和b:a+a+a,a+b+a,@ 987654336@、a+a+b、a+b+b、b+b+b。希望这是有道理的。 -
因此您可以简化结果,因为您可以删除重复项。
-
所以你有一个可以用递归解决的模式。 n=1 -> 2a + (a+b) + 2b,n=2 -> 3a + (2)(2a+b) + (2)(2b + a) + 3b。你能不能也给我n=3,手工很难?
-
为什么
n=2你列出了a+b+a和a+a+b,而不是b+a+a?我会认为所有这 3 个,或者只有一个,但是两个......?
标签: javascript algorithm