0
0
DSA Typescriptprogramming~10 mins

Generate All Permutations of Array in DSA Typescript - Execution Trace

Choose your learning style9 modes available
Concept Flow - Generate All Permutations of Array
Start with empty permutation
Choose element not in current permutation
Add element to current permutation
Is permutation complete?
NoRepeat choosing next element
Yes
Save current permutation
Backtrack: Remove last element
Back to choosing element
Build permutations by adding unused elements one by one, save when full length reached, then backtrack to try other options.
Execution Sample
DSA Typescript
function permute(arr: number[]): number[][] {
  const result: number[][] = [];
  const backtrack = (temp: number[]) => {
    if (temp.length === arr.length) result.push([...temp]);
    else {
      for (const num of arr) {
        if (!temp.includes(num)) {
          temp.push(num);
          backtrack(temp);
          temp.pop();
        }
      }
    }
  };
  backtrack([]);
  return result;
}
Recursively build permutations by adding unused elements until full length, then save and backtrack.
Execution Table
StepOperationCurrent PermutationActionVisual State
1Start backtrack with [][]Choose element 1[1]
2Add 1[1]Choose element 2[1,2]
3Add 2[1,2]Choose element 3[1,2,3]
4Add 3[1,2,3]Permutation complete, save[1,2,3]
5Backtrack[1,2,3]Remove 3[1,2]
6Backtrack[1,2]Remove 2[1]
7Choose element 3[1]Add 3[1,3]
8Add 3[1,3]Choose element 2[1,3,2]
9Add 2[1,3,2]Permutation complete, save[1,3,2]
10Backtrack[1,3,2]Remove 2[1,3]
11Backtrack[1,3]Remove 3[1]
12Backtrack[1]Remove 1[]
13Choose element 2[]Add 2[2]
14Add 2[2]Choose element 1[2,1]
15Add 1[2,1]Choose element 3[2,1,3]
16Add 3[2,1,3]Permutation complete, save[2,1,3]
17Backtrack[2,1,3]Remove 3[2,1]
18Backtrack[2,1]Remove 1[2]
19Choose element 3[2]Add 3[2,3]
20Add 3[2,3]Choose element 1[2,3,1]
21Add 1[2,3,1]Permutation complete, save[2,3,1]
22Backtrack[2,3,1]Remove 1[2,3]
23Backtrack[2,3]Remove 3[2]
24Backtrack[2]Remove 2[]
25Choose element 3[]Add 3[3]
26Add 3[3]Choose element 1[3,1]
27Add 1[3,1]Choose element 2[3,1,2]
28Add 2[3,1,2]Permutation complete, save[3,1,2]
29Backtrack[3,1,2]Remove 2[3,1]
30Backtrack[3,1]Remove 1[3]
31Choose element 2[3]Add 2[3,2]
32Add 2[3,2]Choose element 1[3,2,1]
33Add 1[3,2,1]Permutation complete, save[3,2,1]
34Backtrack[3,2,1]Remove 1[3,2]
35Backtrack[3,2]Remove 2[3]
36Backtrack[3]Remove 3[]
37All permutations generated[]EndAll permutations saved
💡 All elements tried at all positions; recursion ends when all permutations saved.
Variable Tracker
VariableStartAfter Step 1After Step 4After Step 12After Step 25Final
current permutation (temp)[][1][1,2,3][][3][]
result (saved permutations)[][][[1,2,3]][[1,2,3],[1,3,2]][[1,2,3],[1,3,2],[2,1,3],[2,3,1]][[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
Key Moments - 3 Insights
Why do we need to remove the last element after recursive call (backtrack)?
Removing the last element after recursion lets us try other elements in that position. See steps 4 and 5 where 3 is removed to try other options.
Why do we check if element is already in current permutation before adding?
To avoid duplicates in the permutation. The check prevents adding the same element twice, e.g., skips 1 and 2 when current is [1,2].
When do we know a permutation is complete?
When the current permutation length equals the original array length, like in step 4 where length 3 means complete permutation saved.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table at step 4. What is the current permutation?
A[1,2]
B[1,2,3]
C[1,3]
D[]
💡 Hint
Check the 'Current Permutation' column at step 4 in the execution_table.
At which step does the algorithm backtrack after saving the permutation [2,3,1]?
AStep 23
BStep 21
CStep 22
DStep 24
💡 Hint
Look for 'Permutation complete, save' with [2,3,1] and then the next step showing 'Remove 1'.
If we remove the check for element already in permutation, what happens?
APermutations will have duplicates of same element
BAlgorithm will run faster
CNo permutations will be generated
DAlgorithm will crash
💡 Hint
Refer to key_moments about why we check if element is already in current permutation.
Concept Snapshot
Generate all permutations by:
- Recursively adding unused elements to current list
- When length equals input array, save permutation
- Backtrack by removing last element to try others
- Use check to avoid duplicates
- Result is all possible orderings
Full Transcript
This concept shows how to generate all permutations of an array by building them step-by-step. We start with an empty list and add elements one by one if they are not already used. When the current list length matches the original array length, we save that permutation. Then we remove the last element to try other possibilities, called backtracking. This process repeats until all permutations are found. The execution table traces each step, showing how the current permutation grows and shrinks, and when permutations are saved. Key moments explain why we remove elements after recursion and why we check for duplicates. The visual quiz tests understanding of these steps and effects of changes.