LeetCode 46 全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

示例 1:

输入:nums = [1,2,3]
输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

示例 2:

输入:nums = [0,1]
输出:[[0,1],[1,0]]

示例 3:

输入:nums = [1]
输出:[[1]]

提示:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • nums 中的所有整数 互不相同

解答:

func permute(nums []int) [][]int {
	l := len(nums)
	res := make([][]int, 0)
	if l == 0 {
		return res
	}
	tmp := make([]int, 0)
	used := make([]bool, l)
	res = dfs(nums, l, 0, tmp, used, res)
	return res
}

func dfs(nums []int, l, depth int, tmp []int, used []bool, res [][]int) [][]int {
	if depth == l {
		a := make([]int, l)
		copy(a, tmp)
		return append(res, a)
	}
	for i := 0; i < l; i++ {
		if used[i] {
			continue
		}
		tmp = append(tmp, nums[i])
		used[i] = true
		res = dfs(nums, l, depth+1, tmp, used, res)
		tmp = tmp[:len(tmp)-1]
		used[i] = false
	}
	return res
}

官方解答:

1.回溯

官方没有go代码

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注