全排列,使用回溯法
var permute = function (nums) {
if (!Object(nums).length) {
return [];
}
var result = [], condidate = [], n = nums.length, hash = {}
function backtrack(start) {
if (start === n) {//移动到最右边
result.push(condidate.concat());
} else {
for (var i = 0; i < n; i++) {//注意从0开始,不断尝试
if (hash[i]) {
continue;
}
var el = nums[i]
hash[i] = 1 //防止一个 condidate 数组添加了多个mums[i]
condidate.push(el) //试探
backtrack(start + 1); //递归自身
hash[i] = 0
condidate.pop(); //不管成功与否,退回上一步
}
}
}
backtrack(0); //此参数是用来决定索引是否移动到最右边
return result;
};