LeetCode-尽管此函数刚刚记录了一个数组,为什么它返回未定义的值?

时间:2019-06-17 15:58:31

标签: javascript arrays return undefined

由于我是编程新手,所以我目前正在尝试通过解决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块中,所以我认为它们都应该被执行。 如何将“结果”记录为数组,但是返回该结果将导致其“未定义”?

请注意,我知道这可能不是解决此问题的正确方法,这也不是解决问题的足够方法。我不要求进行任何校正,因为我想自己开发算法,这是事实,在这种情况下,“结果”似乎同时被定义和未定义:)

1 个答案:

答案 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]))