这个题目可以用递归的方式求解,设combineSum(k, n)表示用k个数字和为n的组合数,那么可以用来求解combineSum(k + 1, n + x) [x >= 1 && x <= 9],将x添加到每一个组合的头部即可;
代码如下:
def combinationSumK(k: Int, n: Int): List[List[Int]] = { def go(k: Int, n: Int, x: Int): List[List[Int]] = if (k == 1) List(List(n)) else { for { i <- (x + 1 until 10).toList if (n - i > i) list <- go(k - 1, n - i, i) } yield i :: list } go(k, n, 0)}println(combinationSumK(3, 9))println(combinationSumK(4, 24))
这里的实现是使用combineSum(k, n, x)来表示的,x用来限定组合里面数字的起始值,这样可以起到排序和避免重复的作用;