带有min&的增量数组列表最大数量

时间:2016-02-23 04:16:57

标签: javascript arrays

我正在尝试从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

如果你能指出我正确的方向,我会非常感激。

2 个答案:

答案 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]。