leetcode46全排列

leetcode46 Permutations

Posted by BY on February 18, 2019

前言

新的一年,好好学习

正文

问题来源

本问题来自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)算法生成排列 勤思考。

结语

不管怎么样好好加油。