41 lines
1 KiB
Swift
41 lines
1 KiB
Swift
|
class Solution {
|
||
|
private struct Solver {
|
||
|
let k, n: Int
|
||
|
var combinations: [[Int]]
|
||
|
|
||
|
init(k: Int, n: Int) {
|
||
|
self.k = k
|
||
|
self.n = n
|
||
|
self.combinations = []
|
||
|
}
|
||
|
|
||
|
mutating func solve() {
|
||
|
var combination: [Int] = []
|
||
|
solve(&combination, k: k, n: n, nextDigit: 1)
|
||
|
}
|
||
|
|
||
|
private mutating func solve(_ combination: inout [Int], k: Int, n: Int, nextDigit: Int) {
|
||
|
if k == 0 && n == 0 {
|
||
|
combinations.append(combination)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
if k <= 0 || n <= 0 || nextDigit > 9 {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
for d in nextDigit...9 {
|
||
|
combination.append(d)
|
||
|
solve(&combination, k: k - 1, n: n - d, nextDigit: d + 1)
|
||
|
_ = combination.popLast()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func combinationSum3(_ k: Int, _ n: Int) -> [[Int]] {
|
||
|
var s = Solver(k: k, n: n)
|
||
|
s.solve()
|
||
|
return s.combinations
|
||
|
}
|
||
|
}
|