update 0216.组合总和III: 替换 go 代码

This commit is contained in:
Yuhao Ju
2022-12-07 21:07:21 +08:00
committed by GitHub
parent 0cba0854d3
commit 77aeb31bad

View File

@ -36,7 +36,7 @@
想到这一点了,做过[77. 组合](https://programmercarl.com/0077.组合.html)之后,本题是简单一些了。 想到这一点了,做过[77. 组合](https://programmercarl.com/0077.组合.html)之后,本题是简单一些了。
本题k相当于树的深度9因为整个集合就是9个数就是树的宽度。 本题k相当于树的深度9因为整个集合就是9个数就是树的宽度。
例如 k = 2n = 4的话就是在集合[1,2,3,4,5,6,7,8,9]中求 k个数 = 2, n = 4的组合。 例如 k = 2n = 4的话就是在集合[1,2,3,4,5,6,7,8,9]中求 k个数 = 2, n = 4的组合。
@ -380,29 +380,32 @@ class Solution:
回溯+减枝 回溯+减枝
```go ```go
var (
res [][]int
path []int
)
func combinationSum3(k int, n int) [][]int { func combinationSum3(k int, n int) [][]int {
var track []int// 遍历路径 res, path = make([][]int, 0), make([]int, 0, k)
var result [][]int// 存放结果集 dfs(k, n, 1, 0)
backTree(n,k,1,&track,&result) return res
return result
} }
func backTree(n,k,startIndex int,track *[]int,result *[][]int){
if len(*track)==k{ func dfs(k, n int, start int, sum int) {
var sum int if len(path) == k {
tmp:=make([]int,k) if sum == n {
for k,v:=range *track{ tmp := make([]int, k)
sum+=v copy(tmp, path)
tmp[k]=v res = append(res, tmp)
}
if sum==n{
*result=append(*result,tmp)
} }
return return
} }
for i:=startIndex;i<=9-(k-len(*track))+1;i++{//减枝k-len(*track)表示还剩多少个可填充的元素) for i := start; i <= 9; i++ {
*track=append(*track,i)//记录路径 if sum + i > n || 9-i+1 < k-len(path) {
backTree(n,k,i+1,track,result)//递归 break
*track=(*track)[:len(*track)-1]//回溯 }
path = append(path, i)
dfs(k, n, i+1, sum+i)
path = path[:len(path)-1]
} }
} }
``` ```