题目描述:
给定一个 没有重复 数字的序列,返回其所有可能的全排列。
示例:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思路:
回溯算法,遇到合适的放入数组,遇到不合适的就继续
result = []
def backtrack(路径, 选择列表):
if 满足结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径, 选择列表)
撤销选择
部分代码:
javascript:
var permute = function(nums) {
var res = []
var backtrack = function(nums,track){
if(nums.length === track.length){ //递归终止条件,如果track数组长度和比较数组nums长度一致则表示找到结果之一,递归结束,输出数组
res.push(track.slice())
return
}
for(var i=0;i<nums.length;i++){
if(track.indexOf(nums[i])>-1){ //若是track数组中存在与nums[i]一样的数则结束该次循环
continue
}
track.push(nums[i]) //在nums中找到track没有的数时压入track数组中
backtrack(nums,track) //递归调用
track.pop()
}
}
backtrack(nums,[])
return res
};
原文:https://www.cnblogs.com/iknyea/p/backtrack.html