给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
func permute(nums []int) [][]int {
res := [][]int{}
var def func(start int)
def = func(start int) {
if start == len(nums) {
//nums是切片,如果直接添加,后续在回溯的过程中已经添加到res中的值也会发生改变,必须先赋值再添加
temp := make([]int, len(nums))
copy(temp, nums)
res = append(res, temp)
return
}
for i := start; i < len(nums); i++ {
nums[start], nums[i] = nums[i], nums[start]
def(start + 1)
nums[start], nums[i] = nums[i], nums[start]
}
}
def(0)
return res
}