力扣链接:
https://leetcode-cn.com/probl...
解题思路:
- 回溯算法
func permute(nums []int) [][]int {
res := [][]int{}
backtrack(&res, nums, []int{})
return res
}
func backtrack(res *[][]int, nums, path []int) {
if len(path) == len(nums) {
// 切片内存拷贝
newPath := make([]int, len(path))
copy(newPath, path)
*res = append(*res, newPath)
return
}
for i := 0; i < len(nums); i++ {
if contains(path, nums[i]) {
continue
}
path = append(path, nums[i])
backtrack(res, nums, path)
path = path[:len(path) - 1]
}
}
func contains(nums []int, num int) bool {
for _, v := range nums {
if v == num {
return true
}
}
return false
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。