update 0047.全排列II:替换 go 代码,改错字

This commit is contained in:
Yuhao Ju
2022-12-09 21:21:36 +08:00
committed by GitHub
parent f132a28dba
commit 41007ef26c

View File

@ -49,7 +49,7 @@
**一般来说:组合问题和排列问题是在树形结构的叶子节点上收集结果,而子集问题就是取树上所有节点的结果** **一般来说:组合问题和排列问题是在树形结构的叶子节点上收集结果,而子集问题就是取树上所有节点的结果**
在[46.全排列](https://programmercarl.com/0046.全排列.html)中已经详讲解了排列问题的写法,在[40.组合总和II](https://programmercarl.com/0040.组合总和II.html) 、[90.子集II](https://programmercarl.com/0090.子集II.html)中详细讲解去重的写法,所以这次我就不用回溯三部曲分析了,直接给出代码,如下: 在[46.全排列](https://programmercarl.com/0046.全排列.html)中已经详讲解了排列问题的写法,在[40.组合总和II](https://programmercarl.com/0040.组合总和II.html) 、[90.子集II](https://programmercarl.com/0090.子集II.html)中详细讲解去重的写法,所以这次我就不用回溯三部曲分析了,直接给出代码,如下:
## C++代码 ## C++代码
@ -225,33 +225,37 @@ class Solution:
### Go ### Go
```go ```go
var res [][]int var (
func permute(nums []int) [][]int { res [][]int
res = [][]int{} path []int
backTrack(nums,len(nums),[]int{}) st []bool // state的缩写
)
func permuteUnique(nums []int) [][]int {
res, path = make([][]int, 0), make([]int, 0, len(nums))
st = make([]bool, len(nums))
sort.Ints(nums)
dfs(nums, 0)
return res return res
} }
func backTrack(nums []int,numsLen int,path []int) {
if len(nums)==0{ func dfs(nums []int, cur int) {
p:=make([]int,len(path)) if cur == len(nums) {
copy(p,path) tmp := make([]int, len(path))
res = append(res,p) copy(tmp, path)
res = append(res, tmp)
} }
used := [21]int{}//跟前一题唯一的区别同一层不使用重复的数。关于used的思想carl在递增子序列那一题中提到过 for i := 0; i < len(nums); i++ {
for i:=0;i<numsLen;i++{ if i != 0 && nums[i] == nums[i-1] && !st[i-1] { // 去重用st来判别是深度还是广度
if used[nums[i]+10]==1{
continue continue
} }
cur:=nums[i] if !st[i] {
path = append(path,cur) path = append(path, nums[i])
used[nums[i]+10]=1 st[i] = true
nums = append(nums[:i],nums[i+1:]...) dfs(nums, cur + 1)
backTrack(nums,len(nums),path) st[i] = false
nums = append(nums[:i],append([]int{cur},nums[i:]...)...)
path = path[:len(path)-1] path = path[:len(path)-1]
} }
}
} }
``` ```