js中有两个for循环无法在嵌套循环中使用

问题描述

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

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

示例1: 输入:nums = [2,7,11,15],目标= 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,15],9)

解决方法

仅返回数组的长度,如下所示尝试

0 */5 12 30 * ?
,

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

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

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

,

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

  • A生成数字的唯一组合
  • 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,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] 将返回a

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...