题目
代码
/**
* 回溯算法
* nums:数字数组
* track:已经过路径
* 选择列表由nums和track得出
*
* 退出递归条件:路径上已经有数组里的全部数字
*
*/
var permute = function(nums) {
return backTrack(nums, [], [])
};
var backTrack = function(nums, track, res) {
if (track.length === nums.length) {
// 由于数组对象指针问题,这里需要浅拷贝
const temp = [...track]
res.push(temp)
return
}
for (let i = 0; i < nums.length; i++) {
// 去除不合法的选择(可以想象成隐式操作选择列表,去除那些已经选择的元素)
if (track.includes(nums[i])) continue
// 做出选择
track.push(nums[i])
// 继续遍历
backTrack(nums, track, res)
// 撤销选择,为下一个选择腾出空位
track.pop()
}
return res
}