摒弃世俗浮躁
追求技术精湛

【力扣】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 {
	var path []int
	var result [][]int
	var used map[int]bool
	var backtracking func(nums []int, jumpIndex int)
	backtracking = func(nums []int, jumpIndex int) {
		if len(path) == len(nums) {
			tmp := make([]int, len(path))
			copy(tmp, path)
			result = append(result, tmp)
			return
		}
		for i := 0; i < len(nums); i++ {
			if used[nums[i]] {
				continue
			}
			used[nums[i]] = true
			path = append(path, nums[i])
			backtracking(nums, i)
			used[nums[i]] = false
			path = path[:len(path)-1]
		}
	}
	used = make(map[int]bool, len(nums))
	backtracking(nums, 0)
	return result
}
赞(0) 打赏
未经允许不得转载:时光日记 » 【力扣】46. 全排列

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册