LeetCode/swift/combination-sum-iii.swift

41 lines
1 KiB
Swift
Raw Normal View History

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
}
}