首页 > 解决方案 > 查找所有可能的数字组合以获得给定的总和 - Python 到 Nodejs

问题描述

任何人都可以帮我将此代码转换为nodejs吗?

def subset_sum(numbers, target, partial=[], partial_sum=0):

    if partial_sum == target:
        #print("partial_sum")
        #print(target)
        yield partial
    if partial_sum >= target:
        return

    #print(*enumerate(numbers))
    print(*partial)
    for i, n in enumerate(numbers):
        #print(i)
        remaining = numbers[i + 1:]

        yield from subset_sum(remaining, target, partial + [n], partial_sum + n)



list(subset_sum([1, 2, 3, 7, 7, 9, 10], 10))

标签: javascriptpythonnode.js

解决方案


如果您实现自己的enumerate功能,那么与现代 js 的转换确实几乎是 1:1。

console.log(Array.from(subsetSum([1, 2, 3, 7, 7, 9, 10], 10)))

function* subsetSum(numbers, target, partial = [], partialSum = 0) {
  if (partialSum === target) yield partial
  if (partialSum >= target) return
  
  for(const [i, n] of enumerate(numbers)) {
    yield* subsetSum(numbers.slice(i + 1), target, [...partial, n], partialSum + n)
  }
}

function* enumerate(iterable) {
  let i = 0
  for(const item of iterable) {
    yield [i++, item]
  }
}


推荐阅读