Bird
Raised Fist0
DSA Rustprogramming~20 mins

Generate All Permutations of Array in DSA Rust - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Permutation Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Recursive Permutation Generation
What is the output of this Rust code that generates all permutations of the array [1, 2]?
DSA Rust
fn permute(nums: &mut Vec<i32>, start: usize, result: &mut Vec<Vec<i32>>) {
    if start == nums.len() {
        result.push(nums.clone());
        return;
    }
    for i in start..nums.len() {
        nums.swap(start, i);
        permute(nums, start + 1, result);
        nums.swap(start, i);
    }
}

fn main() {
    let mut nums = vec![1, 2];
    let mut result = Vec::new();
    permute(&mut nums, 0, &mut result);
    println!("{:?}", result);
}
A[[2, 1]]
B[[2, 1], [1, 2]]
C[[1, 2]]
D[[1, 2], [2, 1]]
Attempts:
2 left
💡 Hint
Think about how swapping elements and recursion generate all orderings.
🧠 Conceptual
intermediate
1:00remaining
Number of Permutations for Array of Length 3
How many permutations are there for an array of length 3?
A6
B9
C3
D12
Attempts:
2 left
💡 Hint
Number of permutations of n distinct elements is n factorial (n!).
🔧 Debug
advanced
2:00remaining
Identify the Error in Permutation Code
What error does this Rust code produce when trying to generate permutations of [1, 2, 3]? fn permute(nums: &mut Vec, start: usize, result: &mut Vec>) { if start == nums.len() { result.push(nums.clone()); return; } for i in start..nums.len() { nums.swap(start, i); permute(nums, start + 1, result); } } fn main() { let mut nums = vec![1, 2, 3]; let mut result = Vec::new(); permute(&mut nums, 0, &mut result); println!("{:?}", result); }
AMissing swap to revert array state causing incorrect permutations
BStack overflow due to infinite recursion
CCompilation error due to borrow checker
DNo error, outputs all permutations correctly
Attempts:
2 left
💡 Hint
Check if the array is restored after recursive calls.
🚀 Application
advanced
1:30remaining
Permutations of Array with Duplicate Elements
Given the array [1, 1, 2], how many unique permutations are there?
A6
B3
C2
D4
Attempts:
2 left
💡 Hint
Consider that swapping identical elements does not create new unique permutations.
❓ Predict Output
expert
2:30remaining
Output of Permutation Generation with Early Return
What is the output of this Rust code that attempts to generate all permutations of [1, 2, 3] but returns early after the first permutation?
DSA Rust
fn permute(nums: &mut Vec<i32>, start: usize, result: &mut Vec<Vec<i32>>) {
    if start == nums.len() {
        result.push(nums.clone());
        return;
    }
    for i in start..nums.len() {
        nums.swap(start, i);
        permute(nums, start + 1, result);
        return;
        nums.swap(start, i);
    }
}

fn main() {
    let mut nums = vec![1, 2, 3];
    let mut result = Vec::new();
    permute(&mut nums, 0, &mut result);
    println!("{:?}", result);
}
A[[1, 3, 2]]
B[[1, 2, 3], [1, 3, 2]]
C[[1, 2, 3]]
D[]
Attempts:
2 left
💡 Hint
Look at the placement of the return statement inside the loop.

Practice

(1/5)
1. What does the process of generating all permutations of an array mean?
easy
A. Listing all possible orders of the array elements
B. Sorting the array in ascending order
C. Removing duplicate elements from the array
D. Finding the maximum element in the array

Solution

  1. Step 1: Understand permutations

    Permutations are all possible ways to arrange elements in order.
  2. Step 2: Apply to array elements

    Generating all permutations means listing every possible order of the array elements.
  3. Final Answer:

    Listing all possible orders of the array elements -> Option A
  4. Quick Check:

    Permutations = all orders [OK]
Hint: Permutations = all possible orders of elements [OK]
Common Mistakes:
  • Confusing permutations with sorting
  • Thinking permutations remove duplicates
  • Assuming permutations find max element
2. Which Rust code snippet correctly starts generating permutations of a vector vec![1, 2, 3] using recursion?
easy
A. fn permute(arr: &mut Vec<i32>, start: usize) { if start == arr.len() { println!("{:?}", arr); } else { for i in start..arr.len() { arr.swap(start, i); permute(arr, start + 1); arr.swap(start, i); } } }
B. fn permute(arr: Vec<i32>) { for i in 0..arr.len() { println!("{:?}", arr[i]); } }
C. fn permute(arr: &Vec<i32>) { println!("{:?}", arr); }
D. fn permute(arr: &mut Vec<i32>) { arr.sort(); println!("{:?}", arr); }

Solution

  1. Step 1: Identify recursive permutation logic

    fn permute(arr: &mut Vec<i32>, start: usize) { if start == arr.len() { println!("{:?}", arr); } else { for i in start..arr.len() { arr.swap(start, i); permute(arr, start + 1); arr.swap(start, i); } } } uses recursion with swapping and backtracking to generate permutations.
  2. Step 2: Check other options

    Options B, C, and D do not generate permutations; they only print or sort.
  3. Final Answer:

    fn permute(arr: &mut Vec<i32>, start: usize) { if start == arr.len() { println!("{:?}", arr); } else { for i in start..arr.len() { arr.swap(start, i); permute(arr, start + 1); arr.swap(start, i); } } } -> Option A
  4. Quick Check:

    Recursive swap + backtrack = fn permute(arr: &mut Vec<i32>, start: usize) { if start == arr.len() { println!("{:?}", arr); } else { for i in start..arr.len() { arr.swap(start, i); permute(arr, start + 1); arr.swap(start, i); } } } [OK]
Hint: Look for recursion with swap and backtrack [OK]
Common Mistakes:
  • Not using mutable reference for swapping
  • Missing recursive call
  • Printing elements instead of permutations
3. What is the output of this Rust code snippet?
fn permute(arr: &mut Vec<i32>, start: usize) {
    if start == arr.len() {
        println!("{:?}", arr);
    } else {
        for i in start..arr.len() {
            arr.swap(start, i);
            permute(arr, start + 1);
            arr.swap(start, i);
        }
    }
}

fn main() {
    let mut v = vec![1, 2];
    permute(&mut v, 0);
}
medium
A. [1, 2]
B. [1, 2] [2, 1]
C. [2, 1]
D. Compilation error

Solution

  1. Step 1: Trace recursive calls for vec![1, 2]

    Start at index 0, swap with 0 and 1: - Swap(0,0): [1,2], print when start=2 - Swap(0,1): [2,1], print when start=2
  2. Step 2: Confirm output lines

    Both permutations [1, 2] and [2, 1] are printed in order.
  3. Final Answer:

    [1, 2] [2, 1] -> Option B
  4. Quick Check:

    All permutations of [1,2] printed [OK]
Hint: Small array permutations = factorial length outputs [OK]
Common Mistakes:
  • Expecting only one permutation output
  • Confusing swap order
  • Assuming compilation error
4. Identify the bug in this Rust code for generating permutations and select the fix:
fn permute(arr: Vec<i32>, start: usize) {
    if start == arr.len() {
        println!("{:?}", arr);
    } else {
        for i in start..arr.len() {
            let mut arr = arr.clone();
            arr.swap(start, i);
            permute(arr, start + 1);
        }
    }
}

fn main() {
    let v = vec![1, 2, 3];
    permute(v, 0);
}
medium
A. No bug, code works fine
B. Add mut keyword to v in main
C. Replace arr.swap with arr.reverse
D. Change parameter to mutable reference: arr: &mut Vec<i32> and remove cloning

Solution

  1. Step 1: Analyze cloning and mutation

    Cloning arr each loop causes performance issues and unnecessary copies.
  2. Step 2: Fix by using mutable reference

    Passing &mut Vec<i32> allows swapping in place and backtracking without cloning.
  3. Final Answer:

    Change parameter to mutable reference: arr: &mut Vec<i32> and remove cloning -> Option D
  4. Quick Check:

    Use mutable reference to avoid cloning [OK]
Hint: Use &mut Vec to swap without cloning [OK]
Common Mistakes:
  • Cloning inside loop causes inefficiency
  • Not using mutable reference for swaps
  • Thinking adding mut to main vector fixes logic
5. Given a vector vec![1, 2, 2], how many unique permutations will the standard recursive swap method print without filtering duplicates?
hard
A. 2
B. 3
C. 6
D. 1

Solution

  1. Step 1: Calculate total permutations without filtering

    For 3 elements, total permutations = 3! = 6.
  2. Step 2: Consider duplicates in array

    Standard recursive swap method does not filter duplicates, so all 6 permutations including duplicates print.
  3. Final Answer:

    6 -> Option C
  4. Quick Check:

    3! = 6 permutations printed [OK]
Hint: Without filtering, duplicates cause factorial count [OK]
Common Mistakes:
  • Assuming duplicates reduce output automatically
  • Confusing unique permutations with total permutations
  • Thinking output is 3 or 2 without filtering
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard