46. 全排列
给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
【递归实现】
func permute(nums []int) [][]int {
var permutation func([]int, int, int)
r := make([][]int,0)
permutation = func(arr []int, start int, end int) {
if start == end {
target := make([]int, len(arr))
copy(target, arr) //做深拷贝,因为切片是引用类型
r = append(r, target)
} else {
for i := start; i < end; i++ {
swap(arr, start, i)
permutation(arr, start+1, end)
swap(arr, start, i)
}
}
}
permutation(nums, 0, len(nums))
return r
}
func swap(arr []int, a int, b int) {
arr[a], arr[b] = arr[b], arr[a]
}