package Backtrack
func permute(nums []int) [][]int {
result := make([][]int, 0)
size := len(nums)
var f func(i int)
f = func(i int) {
if i == size {
tmp := make([]int, size)
copy(tmp, nums)
result = append(result, tmp)
return
}
for j := i; j < size; j++ {
nums[i], nums[j] = nums[j], nums[i]
f(i + 1)
nums[i], nums[j] = nums[j], nums[i]
}
}
f(0)
return result
}