1、题目
2、题解
看完题目后感觉跟之前的好多道题类似又不那么类似,第一瞬间想到了回溯的方法,感觉回溯有时候就像是个高级递归,代码如下:
var res [][]int
func permute(nums []int) [][]int {
res = [][]int{}
if len(nums)==1{
return append(res, nums)
}
wholeArrangement([]int{}, nums)
return res
}
func wholeArrangement(now, other []int) {
n := len(other)
if n==1 {
now_ := append([]int{}, now...)
other_ := append([]int{}, other...)
res = append(res, append(now_, other_...))
}
for i:=0; i<len(other); i++{
now_ := append([]int{}, now...)
other_ := append([]int{}, other...)
wholeArrangement(append(now_, other_[i]), append(other_[:i], other_[i+1:]...))
}
}
提交结果如下
时间确实很省啊,但是为了防止数组被覆盖每次都要新建数组,这个内存消耗是真的大 😹