mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-09 02:53:31 +08:00
增加 0047.全排列II go版本
增加 0047.全排列II go版本
This commit is contained in:
@ -258,7 +258,45 @@ var permuteUnique = function (nums) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
```
|
```
|
||||||
|
Go:
|
||||||
|
回溯+本层去重+下层去重
|
||||||
|
```golang
|
||||||
|
func permuteUnique(nums []int) [][]int {
|
||||||
|
var subRes []int
|
||||||
|
var res [][]int
|
||||||
|
sort.Ints(nums)
|
||||||
|
used:=make([]bool,len(nums))
|
||||||
|
backTring(nums,subRes,&res,used)
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
func backTring(nums,subRes []int,res *[][]int,used []bool){
|
||||||
|
if len(subRes)==len(nums){
|
||||||
|
tmp:=make([]int,len(nums))
|
||||||
|
copy(tmp,subRes)
|
||||||
|
*res=append(*res,tmp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// used[i - 1] == true,说明同一树支candidates[i - 1]使用过
|
||||||
|
// used[i - 1] == false,说明同一树层candidates[i - 1]使用过
|
||||||
|
for i:=0;i<len(nums);i++{
|
||||||
|
if i>0&&nums[i]==nums[i-1]&&used[i-1]==false{//当本层元素相同且前一个被使用过,则继续向后找(本层去重)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
//到达这里有两种情况:1.该层前后元素不同;2.该层前后元素相同但该层没有使用过
|
||||||
|
//所以只能对该层没有被使用过的抽取
|
||||||
|
if used[i]==false{
|
||||||
|
//首先将该元素置为使用过(即同一树枝使用过),下一层的元素就不能选择重复使用过的元素(下层去重)
|
||||||
|
used[i]=true
|
||||||
|
subRes=append(subRes,nums[i])
|
||||||
|
backTring(nums,subRes,res,used)
|
||||||
|
//回溯
|
||||||
|
//回溯回来,将该元素置为false,表示该元素在该层使用过
|
||||||
|
used[i]=false
|
||||||
|
subRes=subRes[:len(subRes)-1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user