我正在尝试编写一个可以执行排列的函数。
例如,如果我输入CurrencyCard
,预期答案将为
[1, 2, 3]
但不是显示答案,而是返回[ [ 3, 2, 1 ], [ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ] ]
有什么想法吗?
[[ ],[ ],[ ],[ ],[ ]]
答案 0 :(得分:6)
您可以通过切片此数组来获取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(' ')));
没有推送和弹出的版本。
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(' ')));
答案 1 :(得分:0)
使用reverse()的另一种方法,这是一个特殊的排列例,OP给出了一个例子:
var arr = [ [ 3, 2, 1 ], [ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ],[ 3, 2, 1 ] ];
var permuted = arr.map((num) => {
return num.reverse();
});
console.log(permuted);