题目
来源:全排列
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例
解题思路及代码
做这题的时候,参照的是做第78题子集的模板,目前对递归理解的还不是很透彻,先挖个坑,
1. 代码
var permute = function(nums) {
let track = [];
let res = [];
let backtrack = function(track) {
if (track.length == nums.length) {
res.push([...track]);
return;
}
for (let i = 0; i < nums.length; i++) {
if (track.includes(nums[i])) {
continue;
}
track.push(nums[i]);
backtrack(track);
track.pop();
}
}
backtrack(track);
return res;
};
2. 代码思路
从第一个元素开始,我们只需要按顺序枚举每一位可能出现的情况,已经选择的数字在接下来要确定的数字中不能出现。按照这种策略选取就能够做到不重不漏,把可能的全排列都枚举出来。
回溯,数组是几个元素,所以全排列也要返回几个元素,长度相同时,push进res数组返回,即为终止条件。因为是全排列,所以我们每次都要从头全部遍历,这样的话可能会重复遍历一些数字,所以在push进track时,需要先判断track中是否包含该元素。