前言
新的一年,好好学习
正文
问题来源
本问题来自leetcode上的46题。
问题描述
给定一个没有重复数字的序列,返回其所有可能的全排列。
示例 1:
输入: [1,2,3]
输出:
[
[1,2,3],
[1,3,2],
[2,1,3],
[2,3,1],
[3,1,2],
[3,2,1]
]
分析:
算法课上的内容,采用回溯法求得解集
func permute(nums []int) [][]int {
ret := make([][]int,0)
dfs(nums, &ret, 0)
return ret
}
func dfs(nums []int,ret *[][]int, index int) {
l := len(nums)
if index == l {
temp := append([]int{}, nums...)
*ret = append(*ret, temp)
return
}
for i := index; i < l; i++ {
nums[index], nums[i] = nums[i], nums[index]
dfs(nums, ret, index+1)
nums[index], nums[i] = nums[i], nums[index]
}
}
总结:
Johnson-Trotter(JT)算法生成排列 勤思考。
结语
不管怎么样好好加油。