mirror of
https://github.com/youngyangyang04/leetcode-master.git
synced 2025-07-07 15:45:40 +08:00
update 0216.组合总和III: 替换 go 代码
This commit is contained in:
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
想到这一点了,做过[77. 组合](https://programmercarl.com/0077.组合.html)之后,本题是简单一些了。
|
想到这一点了,做过[77. 组合](https://programmercarl.com/0077.组合.html)之后,本题是简单一些了。
|
||||||
|
|
||||||
本题k相当于了树的深度,9(因为整个集合就是9个数)就是树的宽度。
|
本题k相当于树的深度,9(因为整个集合就是9个数)就是树的宽度。
|
||||||
|
|
||||||
例如 k = 2,n = 4的话,就是在集合[1,2,3,4,5,6,7,8,9]中求 k(个数) = 2, n(和) = 4的组合。
|
例如 k = 2,n = 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]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
Reference in New Issue
Block a user