mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 03:34:02 +08:00
Update 0047.全排列II.md
This commit is contained in:
@ -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]
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user