1. 程式人生 > >尋找和為定值的多個數 (0-1 揹包)

尋找和為定值的多個數 (0-1 揹包)

題目描述

輸入兩個整數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)
}