由于我是编程新手,所以我目前正在尝试通过解决LeetCode上的一些简单问题来应用我学到的基础知识。但是,“ 3Sum”问题使我想到了一些我似乎不了解的问题。 这是练习的定义:
给定一个由n个整数组成的数组,是否存在以a + b + c = 0的形式存在的元素a,b,c?在数组中找到所有零的三元组,它们的总和为零。
现在,这是我想到的:
var result = [];
var threeSum = function(nums) {
for (let i = 1; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[0] + nums[i] + nums[j] == 0) {
result.push([nums[0], nums[i], nums[j]])
}
}
}
if(nums.length > 3) {
nums.shift();
threeSum(nums);
} else {
console.log("result: ", result);
return result;
}
};
现在我正在使用以下输入进行测试:
[-1,0,1,2,-1,-4]
底部else块中的console.log语句给出:
结果:[[-1,0,1],[-1,2,-1],[0,1,-1]]
这正是我现在要注销的内容。
但是下面的return语句返回“ undefined”。
因为它们都在同一个else块中,所以我认为它们都应该被执行。 如何将“结果”记录为数组,但是返回该结果将导致其“未定义”?
请注意,我知道这可能不是解决此问题的正确方法,这也不是解决问题的足够方法。我不要求进行任何校正,因为我想自己开发算法,这是事实,在这种情况下,“结果”似乎同时被定义和未定义:)
答案 0 :(得分:0)
您快到了。只需添加return即可进行递归:
var result = [];
var threeSum = function(nums) {
for (let i = 1; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[0] + nums[i] + nums[j] == 0) {
result.push([nums[0], nums[i], nums[j]])
}
}
}
if(nums.length > 3) {
nums.shift();
return threeSum(nums); // <-- return here
} else {
return result;
}
};
console.log(threeSum([-1,0,1,2,-1,-4]))