📖 Scenario: You are helping a chef prepare special ingredient combinations for a recipe. The chef wants to find all unique combinations of ingredients where the total quantity equals a specific target amount.
🎯 Goal: Build a program that finds all unique combinations of numbers from a given list that add up exactly to a target sum k.
📋 What You'll Learn
Create a list of integers called ingredients with the values 2, 3, 6, 7.
Create an integer variable called targetSum and set it to 7.
Write a method called FindCombinations that takes the list ingredients, the targetSum, a starting index, a temporary list for the current combination, and a list to store all valid combinations.
Use recursion and backtracking inside FindCombinations to find all unique combinations where the sum equals targetSum.
Print all the combinations found in the format: [2, 2, 3].
💡 Why This Matters
🌍 Real World
Finding combinations of ingredients or items that meet a specific total is useful in cooking, budgeting, and resource allocation.
💼 Career
This problem teaches recursion and backtracking, important for software engineers working on search algorithms, optimization, and combinatorial problems.
Progress0 / 4 steps
1
Create the list of ingredients
Create a list of integers called ingredients with the exact values 2, 3, 6, and 7.
DSA C#
Hint
Use List<int> and initialize it with the values inside curly braces.
2
Set the target sum
Create an integer variable called targetSum and set it to 7.
DSA C#
Hint
Use int targetSum = 7; inside the Main method.
3
Write the recursive method to find combinations
Write a method called FindCombinations that takes parameters: List<int> ingredients, int targetSum, int start, List<int> current, and List<List<int>> result. Use recursion and backtracking to find all unique combinations where the sum equals targetSum.
DSA C#
Hint
Use recursion with backtracking: add ingredient, recurse with reduced target, then remove ingredient.
4
Call the method and print all combinations
In the Main method, create a list of lists called result to store combinations. Call FindCombinations with ingredients, targetSum, 0, an empty list, and result. Then print each combination in result in the format [2, 2, 3].
DSA C#
Hint
Initialize result as a list of lists. Call FindCombinations with an empty list for current combination. Print each combination using string.Join.
Practice
(1/5)
1. What does the problem "Generate All Combinations Sum K" ask you to find?
easy
A. The largest number less than K
B. The sum of all numbers from 1 to K
C. All unique combinations of numbers that add up to K
D. The product of all numbers that divide K
Solution
Step 1: Understand the problem goal
The problem asks to find all unique sets of numbers that add exactly to K.
Step 2: Identify the correct description
All unique combinations of numbers that add up to K correctly describes finding all unique combinations summing to K.
Final Answer:
All unique combinations of numbers that add up to K -> Option C
Quick Check:
Combinations sum K = all sets adding to K [OK]
Hint: Look for options describing sets adding exactly to K [OK]
Common Mistakes:
Confusing sum with product
Thinking about single numbers instead of combinations
Choosing options about divisors or ranges
2. Which of the following is the correct C# syntax to start a recursive method named FindCombinations that takes a list of integers and a target sum?
easy
A. void FindCombinations(List nums, int target) { }
B. void FindCombinations(List<int> nums, int target) { }
C. void FindCombinations(int nums[], int target) { }
D. void FindCombinations(List<int> nums; int target) { }
Solution
Step 1: Check parameter types and syntax
In C#, a list of integers is declared as List<int>. The method parameters must be separated by commas.
Step 2: Identify correct syntax
void FindCombinations(List<int> nums, int target) { } uses List<int> and comma-separated parameters correctly. Others have syntax errors or wrong types.
Final Answer:
void FindCombinations(List<int> nums, int target) { } -> Option B
Hint: Remember C# uses List<int> and commas between parameters [OK]
Common Mistakes:
Using array syntax int nums[] in method parameters
Missing commas between parameters
Using untyped List without <int>
3. What is the output of the following C# code snippet that generates all combinations of numbers from 1 to 3 that sum to 3?
void Generate(int start, int target, List<int> current, List result) {
if (target == 0) {
result.Add(new List<int>(current));
return;
}
for (int i = start; i <= 3; i++) {
if (i <= target) {
current.Add(i);
Generate(i + 1, target - i, current, result);
current.RemoveAt(current.Count - 1);
}
}
}
var result = new List();
Generate(1, 3, new List<int>(), result);
foreach(var combo in result) {
Console.WriteLine(string.Join(",", combo));
}
medium
A. 3
2,1
B. 1,1,1
3
C. 1,2
2,1
3
D. 1,2
3
Solution
Step 1: Trace recursive calls and combinations
The code tries numbers from start to 3, adding to current if <= target. It avoids repeats by increasing start each call.
Step 2: Identify valid combinations summing to 3
Possible combinations are [1,2] and [3]. The code prints these two lines: "1,2" and "3".
Final Answer:
1,2
3 -> Option D
Quick Check:
Unique combos summing 3 = 1,2 and 3 [OK]
Hint: Check recursion start index to avoid duplicates [OK]
Common Mistakes:
Expecting repeated numbers like 1,1,1
Confusing order of output lines
Including reversed duplicates like 2,1
4. The following code is intended to generate all combinations of numbers from 1 to 4 that sum to 5. What is the main error causing it to miss some combinations?
void Generate(int start, int target, List<int> current, List result) {
if (target == 0) {
result.Add(new List<int>(current));
return;
}
for (int i = start; i < 4; i++) {
if (i <= target) {
current.Add(i);
Generate(i + 1, target - i, current, result);
current.RemoveAt(current.Count - 1);
}
}
}
medium
A. The loop condition should be <= 4, not < 4
B. The recursive call should use i, not i + 1
C. The target check should be target < i, not i <= target
D. The current list should not be copied when adding to result
Solution
Step 1: Analyze the for loop range
The loop runs from start to i < 4, so it stops at i=3, missing i=4.
Step 2: Identify impact on combinations
Because 4 is excluded, combinations including 4 are missed. Changing to i <= 4 fixes this.
Final Answer:
The loop condition should be <= 4, not < 4 -> Option A
Quick Check:
Loop range excludes 4, missing combos [OK]
Hint: Check loop boundaries carefully for inclusive ranges [OK]
Common Mistakes:
Using wrong loop end condition
Changing recursion start incorrectly
Not copying list before adding to result
5. You want to generate all combinations of numbers from 1 to 7 that sum to 7, but each number can be used multiple times. Which change to the recursive call in this C# code will allow repeated numbers?
void Generate(int start, int target, List<int> current, List result) {
if (target == 0) {
result.Add(new List<int>(current));
return;
}
for (int i = start; i <= 7; i++) {
if (i <= target) {
current.Add(i);
Generate(??? , target - i, current, result);
current.RemoveAt(current.Count - 1);
}
}
}
hard
A. Use i to allow repeats
B. Use start to allow repeats
C. Use i + 1 to avoid repeats
D. Use 1 to restart from beginning
Solution
Step 1: Understand how recursion controls repeats
Using i + 1 moves start forward, preventing repeats. Using i keeps start same, allowing repeats.
Step 2: Choose correct recursive call argument
To allow repeated numbers, pass i as start in recursive call.
Final Answer:
Use i to allow repeats -> Option A
Quick Check:
Passing i keeps current number available [OK]
Hint: Pass current index to allow repeats, increment to avoid [OK]
Common Mistakes:
Using i + 1 disables repeats
Using start (unchanged) may cause infinite loops
Restarting from 1 causes duplicates and inefficiency
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.