全排列问题
回溯法:通过探索所有可能的候选解来找出所有的解的算法。
全排列问题
例如:给定一个不含重复数字的数组nums,返回其 所有可能的全排列 。
输入:nums =[1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
本题的解其实就是一个简单的数学排列问题,它的解结构图如下所示。
只要我们从根节点开始遍历这颗树,记录路径上的数字,就可以得到全排列结果。
var permute = function(nums) {
const ans = []
const dfs = idx => {
if (idx === nums.length) {
ans.push([...nums])
}
for (let i = idx; i < nums.length; i++){
nums = swap(nums, i, idx)
dfs(idx + 1)
nums = swap(nums,i,idx)
}
}
dfs(0)
return ans
};
var swap = (arr, a, b) => {
let val = arr[a]
arr[a] = arr[b]
arr[b] = val
return arr
}