LeetCode刷题——46.全排列

46. 全排列

给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。
LeetCode刷题——46.全排列_第1张图片

【递归实现】

func permute(nums []int) [][]int {
	var permutation func([]int, int, int)
	r := make([][]int,0)
	permutation = func(arr []int, start int, end int) {
		if start == end {
			target := make([]int, len(arr))
			copy(target, arr) //做深拷贝,因为切片是引用类型
			r = append(r, target)
		} else {
			for i := start; i < end; i++ {
				swap(arr, start, i)
				permutation(arr, start+1, end)
				swap(arr, start, i)
			}
		}
	}
	permutation(nums, 0, len(nums))
	return r
}

func swap(arr []int, a int, b int) {
	arr[a], arr[b] = arr[b], arr[a]
}

你可能感兴趣的:(LeetCode刷题集,leetcode,算法)