全排列-中等
题目:
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
分析:
回溯算法
// date 2023/11/06
func permute(nums []int) [][]int {
// res 存放所有的结果
res := make([][]int, 0, 1024)
// nums 表示待添加的元素
// temp 表示临时结果
var backtrack func(nums []int, temp []int)
backtrack = func(nums []int, temp []int) {
// 说明都已经添加过了,那么 temp 就是其中的一个结果,直接追加到结果集中
if len(nums) == 0 {
res = append(res, temp)
return
}
for i := range nums {
// 依次添加到 temp 中,形成新的切片
// 并对未使用的元素,回溯添加
newtemp := append(temp, nums[i])
unused := make([]int, 0, len(nums)-1)
unused = append(unused, nums[:i]...)
unused = append(unused, nums[i+1:]...)
backtrack(unused, newtemp)
}
}
backtrack(nums, make([]int, 0))
return res
}
最后更新于