What if you could instantly see every way to arrange your items without missing a single one?
Why Generate All Permutations of Array in DSA C++?
Imagine you have a set of different colored beads and you want to try every possible way to arrange them on a string.
Doing this by hand means writing down every order, checking if you missed any, and it quickly becomes confusing as the number of beads grows.
Manually listing all arrangements is slow and easy to mess up.
As the number of beads increases, the number of possible orders grows very fast, making it impossible to track without mistakes.
Using a method to automatically generate all possible orders (permutations) saves time and avoids errors.
This method systematically swaps beads and explores every arrangement without repetition.
int main() {
// Write all permutations by hand
std::cout << "1 2 3\n";
std::cout << "1 3 2\n";
std::cout << "2 1 3\n";
// ... and so on
}void permute(std::vector<int>& arr, int start) {
if (start == arr.size()) {
print(arr);
return;
}
for (int i = start; i < arr.size(); i++) {
std::swap(arr[start], arr[i]);
permute(arr, start + 1);
std::swap(arr[start], arr[i]);
}
}This lets you explore every possible order of items quickly and correctly, no matter how many there are.
Finding all possible seat arrangements for guests at a dinner party to ensure everyone sits next to different people each time.
Manual listing of permutations is slow and error-prone.
Generating permutations programmatically explores all orders systematically.
This approach works well even as the number of items grows.
Practice
Solution
Step 1: Understand permutations
Permutations are all possible ways to arrange elements in order.Step 2: Apply to array elements
Generating all permutations means listing every possible order of the array elements.Final Answer:
Listing all possible orders of the array elements -> Option AQuick Check:
Permutations = all orders [OK]
- Confusing permutations with sorting
- Thinking permutations remove duplicates
- Assuming permutations find max or min
arr with size n</> and current index start?Solution
Step 1: Check parameter order and types
The function needs the array, current index (start), and total size (n) to generate permutations recursively.Step 2: Validate return type and parameters
It should return void (no value) and have parameters (int arr[], int start, int n) in that order.Final Answer:
void permute(int arr[], int start, int n) -> Option AQuick Check:
Correct signature = void permute(arr, start, n) [OK]
- Wrong parameter order
- Incorrect return type
- Missing current index parameter
void permute(int arr[], int start, int n) {
if (start == n) {
for (int i = 0; i < n; i++) std::cout << arr[i] << ' ';
std::cout << '\n';
return;
}
for (int i = start; i < n; i++) {
std::swap(arr[start], arr[i]);
permute(arr, start + 1, n);
std::swap(arr[start], arr[i]);
}
}
int main() {
int arr[] = {1, 2};
permute(arr, 0, 2);
return 0;
}Solution
Step 1: Trace first call with arr = {1, 2}
Start = 0, n = 2. Swap arr[0] with arr[0] (no change), call permute with start=1.Step 2: Trace second call with start=1
Swap arr[1] with arr[1] (no change), call permute with start=2 which prints "1 2".Step 3: Backtrack and swap arr[0] with arr[1]
Array becomes {2, 1}, call permute with start=1 again.Step 4: At start=1 again, swap arr[1] with arr[1], call permute with start=2 prints "2 1".
Final Answer:
1 2 \n 2 1 \n -> Option BQuick Check:
All permutations of {1,2} printed [OK]
- Not swapping back after recursion
- Printing before base case
- Incorrect loop range
arr of size n:void permute(int arr[], int start, int n) {
if (start == n) {
for (int i = 0; i < n; i++) std::cout << arr[i] << ' ';
std::cout << '\n';
return;
}
for (int i = 0; i < n; i++) {
std::swap(arr[start], arr[i]);
permute(arr, start + 1, n);
std::swap(arr[start], arr[i]);
}
}Solution
Step 1: Analyze the for loop range
The loop swaps arr[start] with arr[i]. If i starts at 0 always, it swaps elements already fixed in previous recursion steps.Step 2: Correct loop start index
Loop should start from i = start to avoid repeating swaps and ensure correct permutations.Final Answer:
Loop should start from i = start, not 0 -> Option DQuick Check:
Loop from start to n fixes correct elements [OK]
- Starting loop from 0 causes repeated permutations
- Changing base case incorrectly
- Misplacing swap calls
arr = {1, 2, 2}, how many unique permutations will a correct C++ program generate if it avoids duplicates?Solution
Step 1: Calculate total permutations without duplicates
For 3 elements with two 2's, total permutations = 3! / 2! = 3.Step 2: List unique permutations
They are {1,2,2}, {2,1,2}, {2,2,1} -- total 3 unique permutations.Final Answer:
3 -> Option CQuick Check:
3! / 2! = 3 unique permutations [OK]
- Counting duplicates as unique permutations
- Using 3! = 6 without division
- Ignoring repeated elements
Ready to prove it?
Pass the test and this pattern moves unknown
