题目描述
输入两个整数n和sum,从数列1,2,3.......n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来。
分析与解法
每个数都存在被选择或不被选择两种可能,分类递归即可(分治思想)
package main
import "fmt"
func SumOfKNumber(n, sum, k, sumCur int, x *[]int) {
if sumCur == sum {
fmt.Println(*x)
return
}
if k+1 <= n {
if sumCur < sum {
*x = append(*x, k)
SumOfKNumber(n, sum, k+1, sumCur+k, x) // 选择 k
*x = (*x)[:len(*x)-1]
SumOfKNumber(n, sum, k+1, sumCur, x) // 不选择 k
}
}
}
func main() {
x := make([]int, 0)
SumOfKNumber(10, 11, 1, 0, &x)
}