下面是leetcode组合问题的解决方案https://leetcode.com/problems/combinations/.基本上,n选择k,返回所有可能性。我在我的第二个for循环中遇到了这个问题,你可以看到
tmpResult[i].push(n);
result.push(tmpResult[i]);
如果我做
result.push(tmpResult[i].push(n));
结果非常不同,我得到了一个错误:第22行:TypeError:tmpResult[i].push不是函数我来自java世界,javascript在与上面两行代码不同的一行代码中有什么不同之处?
var combine = function(n, k) {
if (k === 0 || k > n)
return [];
var result = [];
if (k === 1) {
for (var i = 1; i <= n; i++) {
result.push([i]);
}
return result;
}
// choose n
var tmpResult = combine(n-1,k-1);
for( var i = 0; i < tmpResult.length; i++) {
tmpResult[i].push(n);
result.push(tmpResult[i]);
// below doesnt work
// result.push(tmpResult[i].push(n));
}
// not choose n
result = result.concat(combine(n-1, k));
return result;
};
Array.prototype.push()
push()方法将一个或多个元素添加到数组的末尾返回数组的新长度。
您将数组的长度添加到result
,这就是result.push(tmpResult[i].push(n));
不起作用的原因。
push方法返回数组的新大小,而不是数组本身