Leetcode 46. 全排列
阿新 • • 發佈:2022-05-09
思路 回溯法
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的操作 } }