我正在尝试从Codewars解决这个问题,因为我的生活无法弄清楚什么是错的。
给定一个数字列表,返回列表,使每个索引的值增加1,直到达到最大值。
这是我提出的解决方案,但它不适用于这些数据集:[6,9]和[-1,4]。如果您想自己尝试,请点击此链接:codewars - lario & muigi
def comb(str, memo={})
return memo[str] if memo.key?(str)
[ str,
*if str.size > 1
str.each_char.with_index.flat_map do |_,i|
next_str = str.dup
next_str.slice!(i)
memo[str] = comb(next_str, memo)
end
end
]
end
p comb("wxyz").uniq.sort
如果你能指出我正确的方向,我会非常感激。
答案 0 :(得分:0)
这是因为您没有从最小值增加到最大值。
此解决方案应该有效:
function pipeFix(numbers) {
var max = Math.max.apply(this, numbers);
var min = Math.min.apply(this, numbers);
var result = []
for (var i = min; i <= max; i++) {
result.push(i)
}
return result;
}
答案 1 :(得分:0)
您的解决方案不起作用的原因是for
语句中的条件不正确。
对于一组:[6,9],你得到firstNum
= 6而lastNum
= 9.这部分没问题。问题是iterations
变量,在这种情况下是4。
在for
语句中,您从值6开始,但条件
i <= iterations
表示变量i
必须小于或等于4.你在第一次迭代中破坏了这个条件,所以你得到的数组是空的。
将for
语句更改为:
for (var i = firstNum; i <= lastNum; i++) {
arr.push(i);
}
事实上,您不再需要iterations
变量。
Elvio Cavalcante的解决方案也会起作用,即使您在输入数组中交换数字也会得到[9,6]而不是[6,9]。