gpt4 book ai didi

javascript - Leetcode 上的组合和 III

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:57:23 26 4
gpt4 key购买 nike

leetcode 问题是:

Find all possible combinations of k numbers that add up to a number n, given that only numbers from 1 to 9 can be used and each combination should be a unique set of numbers.

Example 1:

Input: k = 3, n = 7

Output:

[[1,2,4]]

Example 2:

Input: k = 3, n = 9

Output:

[[1,2,6], [1,3,5], [2,3,4]]

我在 Javascript 中找到了解决方案

var combinationSum3 = function(k, n) {
var result = [];
search(1, [], k, n);
return result;

function search(from, prefix, k, n) {
if (k === 0 && n === 0) return result.push(prefix);
if (from > 9) return;
prefix.push(from);
search(from + 1, prefix.slice(0), k - 1, n - from);
prefix.pop();
search(from + 1, prefix.slice(0), k, n);
}
};

我假设 slice(0) 方法返回原始数组的副本,所以我尝试用 prefix 替换 prefix.slice(0)。但是,我得到的结果是 [ [ ] ]。这里的问题是什么?

最佳答案

引用有问题。如果你使用 slice,你会得到一个数组的副本。如果您仅使用 prefix,则所有后续操作(如 push 或 pop)都会影响数组。

如果您不喜欢使用副本,您可以使用 concat,它也提供一个新数组,但带有新项目。

你的代码看起来像这样:

var combinationSum3 = function (k, n) {
var result = [];
search(1, [], k, n);
return result;

function search(from, prefix, k, n) {
if (k === 0 && n === 0) return result.push(prefix);
if (from > 9) return;
search(from + 1, prefix.concat(from), k - 1, n - from);
search(from + 1, prefix, k, n);
}
};

console.log(combinationSum3(3, 7));
console.log(combinationSum3(3, 9));
console.log(combinationSum3(4, 12));

关于javascript - Leetcode 上的组合和 III,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38652810/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com