46.全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
示例1
输入: nums = [1,2,3]
输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
示例2
输入: nums = [0,1]
输出: [[0,1],[1,0]]
示例3
输入: nums = [1]
输出: [[1]]
解法
func permute(nums []int) [][]int {
res:=[][]int{}
used:=make([]bool,len(nums))
dfs(nums,0,nil,used,&res)
return res
}
func dfs(nums []int, index int, temp []int, used []bool, res *[][]int){
if len(temp)==len(nums){
copyTemp:=make([]int,len(nums))
copy(copyTemp,temp)
*res=append(*res,copyTemp)
return
}
for i:=0;i<len(nums);i++{
if used[i]!=true{
used[i]=true
dfs(nums,i+1,append(temp,nums[i]),used,res)
used[i]=false
}
}
return
}
解题
47.全排列II
给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列。
示例1
输入: nums = [1,1,2]
输出:
[[1,1,2],
[1,2,1],
[2,1,1]]
示例2
输入: nums = [1,2,3]
输出: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
解法
func permuteUnique(nums []int) [][]int {
sort.Ints(nums)
res:=[][]int{}
used:=make([]bool,len(nums))
dfs(nums,0,nil,used,&res)
return res
}
func dfs(nums []int,index int, temp []int, used []bool, res *[][]int){
if len(temp)==len(nums){
copyTmep:=make([]int,len(temp))
copy(copyTmep,temp)
*res=append(*res,copyTmep)
return
}
for i:=0;i<len(nums);i++{
if i > 0 && nums[i] == nums[i - 1] && used[i - 1] {
continue
}
if !used[i]{
used[i]=true
dfs(nums,i+1,append(temp,nums[i]),used,res)
used[i]=false
}
}
}
解题