Sponsored
Sponsored
This approach uses backtracking to explore all possible combinations. Start with an empty combination, then add numbers incrementally and explore subsequent possibilities. If the sum of combination exceeds n
or if it reaches the required length k
, backtracking occurs to explore other potential combinations.
Time Complexity: O(2^n)
because each number has a choice of being included or not.
Space Complexity: O(k)
for the recursion stack.
1using System;
2using System.Collections.Generic;
3
4public class Solution {
5 public IList<IList<int>> CombinationSum3(int k, int n) {
6 IList<IList<int>> results = new List<IList<int>>();
7 Backtrack(k, n, 1, new List<int>(), results);
8 return results;
9 }
10
11 private void Backtrack(int k, int n, int start, List<int> path, IList<IList<int>> results) {
12 if (k == 0 && n == 0) {
13 results.Add(new List<int>(path));
14 return;
15 }
16 for (int i = start; i <= 9; i++) {
17 if (i > n) break;
18 path.Add(i);
19 Backtrack(k - 1, n - i, i + 1, path, results);
20 path.RemoveAt(path.Count - 1);
21 }
22 }
23
24 public static void Main() {
25 Solution sol = new Solution();
26 IList<IList<int>> result = sol.CombinationSum3(3, 7);
27 foreach (var list in result) {
28 Console.WriteLine(string.Join(", ", list));
29 }
30 }
31}
The C# code operates similarly to previous examples, using a recursive approach. The function Backtrack
adjusts the combination being tested, while results are accumulated in the list results
when combinations are valid.
This approach leverages bitmasking to generate all subsets of numbers {1,2,...,9} and filters conceivable combinations by size and sum criteria. It's potentially less intuitive, yet eliminates recursion.
Time Complexity: O(2^n)
, iterating through bitmask combinations for validity checks.
Space Complexity: O(k)
due to maintained size of data
array.
1using System.Collections.Generic;
public class CombinationSum3Iterative {
public IList<IList<int>> CombinationSum3(int k, int n) {
IList<IList<int>> result = new List<IList<int>>();
for (int mask = 0; mask < (1 << 9); ++mask) {
List<int> comb = new List<int>();
int sum = 0;
for (int i = 0; i < 9; ++i) {
if ((mask & (1 << i)) != 0) {
sum += (i + 1);
comb.Add(i + 1);
}
}
if (comb.Count == k && sum == n) {
result.Add(new List<int>(comb));
}
}
return result;
}
public static void Main() {
CombinationSum3Iterative solution = new CombinationSum3Iterative();
var result = solution.CombinationSum3(3, 7);
foreach (var set in result) {
Console.WriteLine(string.Join(", ", set));
}
}
}
The C# solution is aligned with bitmasking, iterating interaction courses through all potential 512 number uses outcomes from 1 to 9. Filtered results meeting specification are simply recorded in final result
.