Leetcode 46. 全排列
思路 回溯法
var res [][]int func permute(nums []int) [][]int { res = make([][]int, 0) backTracking([]int{}, nums, len(nums)) return res } func backTracking(path []int, nums []int, numLength int) { if len(nums) == 0 { //如果当前nums已经空了,已经到了叶子节点,可以收集结果了 temp := make([]int, len(path)) copy(temp, path) res = append(res, temp) //将这个叶子节点的结果添加到最终结果数组中 } for i := 0; i < numLength; i++ { cur := nums[i] //临时存储当前值 path = append(path, cur) //现将当前值加到path中 nums = append(nums[:i], nums[i+1:]...) //因为当前值已经使用过,所以将这个值从nums中移除 backTracking(path, nums, len(nums)) //对剩下的值继续递归 nums = append(nums[:i], append([]int{cur}, nums[i:]...)...) //撤销将当前值从nums中移除的操作,将cur的值放回到原来i的位置 path = path[:len(path)-1] //撤销将当前值添加到path的操作 } }