这是一个经典的问题,可以使用回溯算法来解决。以下是用JavaScript实现的代码:

function combinationSum(candidates, target) {
  const result = [];

  function backtrack(tempList, remain, start) {
    if (remain < 0) {
      return;
    } else if (remain === 0) {
      result.push([...tempList]);
    } else {
      for (let i = start; i < candidates.length; i++) {
        tempList.push(candidates[i]);
        backtrack(tempList, remain - candidates[i], i);
        tempList.pop();
      }
    }
  }

  backtrack([], target, 0);
  return result;
}

const candidates = [2, 3, 5];
const target = 8;
const result = combinationSum(candidates, target);
console.log(result); // [[2, 2, 2, 2], [2, 3, 3], [3, 5]]

这个函数combinationSum接受两个参数:candidates是一个数字数组,代表可选的数字,target是目标数字。函数返回一个二维数组,每个子数组是一个符合条件的组合。

函数中的backtrack函数是核心部分,它采用递归的方式,依次尝试每个数字,将符合条件的数字保存在tempList数组中,如果remain小于0,说明这个组合不符合条件,直接退出递归;如果remain等于0,说明这个组合符合条件,将tempList保存到result数组中;否则,继续递归尝试下一个数字。

在主函数中,我们调用backtrack函数,并将tempList初始化为空数组,remain初始化为targetstart初始化为0。最后返回result数组即可。

我考考你如何用js实现 例如输入:candidates = 235 target = 8输出:222223335

原文地址: https://www.cveoy.top/t/topic/bGy4 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录