46.全排列
46.全排列
题解
dfs回溯,,go跟c++写起来感觉还真不一样
代码
package main import "sort" var vis map[int]bool = make(map[int]bool) func permute(nums []int) [][]int { // 保存最终结果 result := make([][]int, 0) // 保存中间结果 list := make([]int, 0) sort.Ints(nums) backtrack(nums, list, &result) return result } // nums 给定的集合 // pos 下次添加到集合中的元素位置索引 // list 临时结果集合(每次需要复制保存) // result 最终结果 func backtrack(nums []int, list []int, result *[][]int) { if len(list) == len(nums) { // 把临时结果复制出来保存到最终结果 ans := make([]int, len(list)) copy(ans, list) *result = append(*result, ans) } // 选择、处理结果、再撤销选择 for i := 0; i < len(nums); i++ { if vis[nums[i]] != true { vis[nums[i]] = true list = append(list, nums[i]) backtrack(nums, list, result) list = list[0 : len(list)-1] vis[nums[i]] = false } } }