跳到主要内容

46.全排列

链接:46.全排列
难度:Medium
标签:数组、回溯
简介:给定一个 没有重复 数字的序列,返回其所有可能的全排列。

题解 1 - javascript

  • 编辑时间:2020-04-25
  • 执行用时:80ms
  • 内存消耗:37.3MB
  • 编程语言:javascript
  • 解法介绍:通过递归对每层判断后压栈。
/**
* @param {number[]} nums
* @return {number[][]}
*/
var permute = function (nums) {
const len = nums.length;
if (len === 1) return [nums];
const res = [];
for (let i = 0; i < len; i++) {
const newNums = permute(nums.filter((_, index) => index !== i));
for (const newNum of newNums) res.push([nums[i]].concat(newNum));
}
return res;
};

题解 2 - typescript

  • 编辑时间:2021-07-21
  • 执行用时:88ms
  • 内存消耗:41MB
  • 编程语言:typescript
  • 解法介绍:全排列。
function permute(nums: number[]): number[][] {
const ans: number[][] = [];
find();
return ans;
function find(list = nums, queue: number[] = []): void {
if (list.length === 0) {
ans.push(queue.slice());
return;
}
for (let i = 0, l = list.length; i < l; i++) {
queue.push(list[i]);
find([...list.slice(0, i), ...list.slice(i + 1)], queue);
queue.pop();
}
}
}