经典题型 排列和组合
func permute(nums []int, idx int,
p *[]int, visited *[]bool, res *[][]int) {
if idx == len(nums) {
tmp := make([]int, len(nums))
copy(tmp, *p)
*res = append(*res, tmp)
return
}
for i, v := range nums {
if !(*visited)[i] {
(*visited)[i] = true
*p = append(*p, v)
permute(nums, idx+1, p, visited, res)
(*visited)[i] = false
*p = (*p)[:len(*p)-1]
}
}
}