描述
题目描述:给定一个没有重复数字的序列,返回其所有可能的全排列。
示例
输入: [1,2,3]
输出: [
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
思想
穷举,联想到DFS,使用的递归
递归就需要边界,这里的边界是访问到最后一个坑
用一个visited对象标记访问过的对象
代码
function perOrder(nums){
const length = nums.length
const res = []
const curArr = []
const visited = {}
function dfs(nth) {
if(nth >= length) {
res.push(curArr.slice())
return
}
for(let i = 0; i < length; i++) {
if(!visited[nums[i]]) {
curArr.push(nums[i])
visited[nums[i]] = true
dfs(nth + 1)
curArr.pop()
visited[nums[i]] = false
}
}
}
dfs(0)
return res
}