Update 0047.全排列II.md

This commit is contained in:
hitorig
2021-08-06 18:03:29 +08:00
committed by GitHub
parent 1ae78a86ca
commit 31ddd23e1d

View File

@ -229,34 +229,30 @@ Go
var res [][]int var res [][]int
func permute(nums []int) [][]int { func permute(nums []int) [][]int {
res = [][]int{} res = [][]int{}
sort.Ints(nums) backTrack(nums,len(nums),[]int{})
dfs(nums, make([]int, 0), make([]bool, len(nums)))
return res return res
} }
func backTrack(nums []int,numsLen int,path []int) {
func dfs(nums, path []int, used []bool) { if len(nums)==0{
if len(path) == len(nums) { p:=make([]int,len(path))
res = append(res, append([]int{}, path...)) copy(p,path)
return res = append(res,p)
} }
used := [21]int{}//跟前一题唯一的区别同一层不使用重复的数。关于used的思想carl在递增子序列那一题中提到过
m := make(map[int]bool) for i:=0;i<numsLen;i++{
for i := 0; i < len(nums); i++ { if used[nums[i]+10]==1{
// used 从剩余 nums 中选
if used[i] {
continue continue
} }
// m 集合间去重 cur:=nums[i]
if _, ok := m[nums[i]]; ok { path = append(path,cur)
continue used[nums[i]+10]=1
} nums = append(nums[:i],nums[i+1:]...)
m[nums[i]] = true backTrack(nums,len(nums),path)
path = append(path, nums[i]) nums = append(nums[:i],append([]int{cur},nums[i:]...)...)
used[i] = true
dfs(nums, path, used)
used[i] = false
path = path[:len(path)-1] path = path[:len(path)-1]
} }
} }
``` ```