微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

记录不同的数组

如何解决记录不同的数组

我正在尝试仅在'console.log(partial)'下填充一个不同的数组,例如,如果target = 5并且我有一组数字[1,1,2,2 ],子集将只给我这两个数组:[1,2]或[1,2]。但是,在我的控制台日志中,相同的两组数组被多次填充。我的代码有问题吗?

function subsetSum(numbers,target,partial) {
  var s,n,remaining;

  partial = partial || [];

  // sum partial
  s = partial.reduce(function (a,b){
    return a + b;
  },0);

  // check if the partial sum is equals to target
 if (s === target) {
    console.log("%s=%s",partial.join("+"),target)
    console.log(partial)
    for(j = 0; j < partial.length; j++){
      if (partial[j] == 1){
      console.log("here")
      }
    }
  }

  if (s >= target) {
    return;  // if we reach the number why bother to continue
  }

  for (var i = 0; i < numbers.length; i++) {
    n = numbers[i];
    remaining = numbers.slice(i + 1);
    subsetSum(remaining,partial.concat([n]));
  }
  return;
}

解决方法

您得到一个以上的结果

[1,1,2,2]

因为您拥有多个具有相同值的元素。

例如,如果您对值进行编号并且仅使用整数值,则可以看到这种情况。

要排除相同的结果,您需要在结果集中进行搜索,并避免重复输入相同的数字。

function subsetSum(numbers,target,partial = []) {
    const
        sum = partial.reduce((a,b) => a + parseInt(b,10),0),result = [];

    if (sum === target) return [partial];
    if (sum > target) return [];

    for (let i = 0; i < numbers.length; i++) {
        const n = numbers[i];
        result.push(...subsetSum(numbers.slice(i + 1),partial.concat(n)));
    }
    return result;
}

subsetSum(['1#1','1#2','1#3','1#4','1#5','2#1','2#2'],5).forEach(a => console.log(...a));
.as-console-wrapper { max-height: 100% !important; top: 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。