题目
给定一个不重复数组 nums
,返回所有可能的排列组合。可以以任意顺序返回。
解析
求一个数组的全排列,即是,每次从数组中取一个数,求这些提取顺序的组合。用递归求解很简单。
第一个问题,如何确定剩下的数字。
题目中给了约束条件,数字范围是 -10 到 10 之间,所以我们每次取出一个数,将这个数置为一个特定的数字,递归完成后,再将这个数字置为原来的数即可。
1 <= nums.length <=6
-10 <= nums[i] <= 10
伪代码
for i<lens(nums)
if nums[i] == EMPTY
continue
res = nums[i]
nums[i] = EMPTY
rst = append(rst, res + func(nums[i]))
nums[i] = res
return rst
代码
func permute(nums []int) [][]int {
var rsts [][]int
for i:=0;i<len(nums); i++ {
if nums[i] == 1<<31-1 {
continue
}
res := nums[i]
nums[i] = 1<<31-1
rst := permute(nums)
if rst == nil {
rsts = [][]int{{res}}
}
for i := range rst {
rsts = append(rsts, append(rst[i], res))
}
nums[i] = res
}
return rsts
}
image.png
后记
- 当 permute 为 空的时候,记得返回当前元素作为结果
网友评论