解题思路
很简单也很经典的一道题,深度优先搜索搭配回溯法即可解决问题。
还是之前总结的那样,对于这种涉及到尝试所有解决方案的题目,一定要想到回溯法。
AC代码
func permute(nums []int) [][]int {
res,used,temp:=[][]int{},make([]bool,len(nums)),[]int{}
var dfs func()
dfs=func(){
if len(temp)==len(nums){
t:=make([]int,len(temp))
copy(t,temp)
res=append(res,t)
return
}
for i:=0;i<len(nums);i++{
if used[i]==false{
used[i]=true
temp=append(temp,nums[i])
dfs()
temp=temp[:len(temp)-1]
used[i]=false
}
}
}
dfs()
return res
}
感悟
golang 的切片参数传递是真的烦人,一点没处理好就可能出现难以想象的bug,所以涉及到在函数中更改切片的操作均传递指针,防止出现意想不到的情况。