题目描述
输入两个整数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)
}

本文详细解析了一种从数列中寻找所有可能组合以达到指定和的算法。通过递归方式,探讨了如何从1到n的整数序列中找出所有和等于特定目标值的组合。使用Go语言实现,展示了具体代码示例。
997

被折叠的 条评论
为什么被折叠?



