0

我正在解决以下问题,但不确定为什么我的第二个 for 循环会执行 console.log 任何操作。我目前得到一个结果 [],当我处理循环时,我有时会感到困惑,因为输出返回空结果。那么为什么我的第二个 for 循环没有执行,为什么我不能将结果推送到结果数组?

给定一个整数数组 nums 和一个整数目标,返回两个数字的索引,使它们相加为目标。您可以假设每个输入都只有一个解,并且您不能两次使用相同的元素。您可以返回任何顺序的答案。

示例 1:输入:nums = [2,7,11,15], target = 9 输出:[0,1] 输出:因为 nums[0] + nums[1] == 9,我们返回 [0, 1] .

function a(nums, target) {

let result = [];

for (let i = 0; i < nums.length -1; i++){


    let firstNum = nums[i];

    console.log(i)
    
    for (let j = i + 1; j < nums.length -1; j++){

        console.log(j)
        let secondNum = nums[j];
        
        let sum = firstNum + secondNum;
        
        

        if (sum === target) {
            return result.push(i, j);
            }
        } 
    }
    return result; 
};

a([2,7,11,15], 9)
4

3 回答 3

2

Push 只返回数组的长度,尝试如下,

function a(nums, target) {

    let result = [];

    for (let i = 0; i < nums.length; i++){


        let firstNum = nums[i];

        console.log("i", i)

        for (let j = i + 1; j < nums.length; j++){

            console.log("j", j)
            let secondNum = nums[j];

            let sum = firstNum + secondNum;



            if (sum === target) {
                result.push(i, j);
                return result;
            }
        } 
    }
    return result; 
};

let result = a([2,7,11,15], 9);
console.log(result);
于 2020-09-30T03:31:51.000 回答
0

您的代码实际上是正确的,只是您返回的结果result.push(i, j)返回数组的长度。

使用result.push(i, j);然后return result;

而不仅仅是return result.push(i, j);

于 2020-09-30T03:41:50.123 回答
0

考虑将问题分解成更小的部分 -

  • t生成唯一的数字组合
  • a通过生成器搜索第一个有效解决方案的步骤

function* t(n, i = 0, p = [])
{ if (p.length >= 2)
    yield p
  else if (i >= n.length)
    return
  else
    ( yield* t(n, i + 1, [...p, n[i]])
    , yield* t(n, i + 1, p)
    )
}

function a(n, q)
{ for (const [a, b] of t(n)) // <- step thru t
    if (a + b == q)          // <- simple condition
      return [a, b]          // <- solution
}

const result =
  a([2,7,11,15], 9)

console.log(result)

输出 -

[2, 7]

aundefined如果无法得到答案,将返回

于 2020-09-30T04:29:36.870 回答