问题描述
我正在处理以下问题,但是不确定为什么我的第二个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