joh*_*kuo 5 javascript arrays ecmascript-6
我正在尝试编写一个可以执行排列的函数.
例如,如果我输入[1, 2, 3],预期答案将是
[ [ 3, 2, 1 ], [ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ] ]
Run Code Online (Sandbox Code Playgroud)
但它没有显示答案,而是返回 [[ ],[ ],[ ],[ ],[ ]]
有任何想法吗?
var permute = (nums) => {
results = [];
var backtrack = (nums, result) => {
if (nums.length === result.length) {
results.push(result);
} else {
for (var i = 0; i < nums.length; i++) {
if (result.indexOf(nums[i]) > -1) {
continue;
}
result.push(nums[i]);
backtrack(nums, result);
result.pop();
}
}
}
backtrack(nums, []);
return results;
};
console.log(permute([1, 2, 3]));Run Code Online (Sandbox Code Playgroud)
您可以result通过切片此数组来获取本地副本,以防止结果集中的相同对象引用.
var permute = (nums) => {
var results = [];
var backtrack = (nums, result) => {
if (nums.length === result.length) {
results.push(result.slice()); // push copy
} else {
for (var i = 0; i < nums.length; i++) {
if (result.indexOf(nums[i]) > -1) {
continue;
}
result.push(nums[i]);
backtrack(nums, result);
result.pop();
}
}
};
backtrack(nums, []);
return results;
};
console.log(permute([1, 2, 3]).map(a => a.join(' ')));Run Code Online (Sandbox Code Playgroud)
没有推送和弹出的版本.
var permute = (nums) => {
var results = [];
var backtrack = (nums, result) => {
if (nums.length === result.length) {
results.push(result);
} else {
for (var i = 0; i < nums.length; i++) {
if (result.indexOf(nums[i]) > -1) {
continue;
}
backtrack(nums, result.concat(nums[i])); // use a new array
}
}
};
backtrack(nums, []);
return results;
};
console.log(permute([1, 2, 3]).map(a => a.join(' ')));Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |