📖 Scenario: You are working on a puzzle game where you need to find all possible ways to arrange a set of unique numbers. This helps the game engine explore every possible move.
🎯 Goal: Build a TypeScript program that generates all permutations of a given array of numbers.
📋 What You'll Learn
Create an array called numbers with the exact values [1, 2, 3].
Create a variable called result to store all permutations as arrays.
Write a recursive function called permute that generates all permutations of numbers.
Print the result array showing all permutations.
💡 Why This Matters
🌍 Real World
Generating all permutations is useful in games, puzzles, and testing all possible arrangements in scheduling or routing problems.
💼 Career
Understanding permutations and recursion is important for software engineers working on algorithms, optimization, and problem-solving tasks.
Progress0 / 4 steps
1
Create the initial array
Create an array called numbers with the exact values [1, 2, 3].
DSA Typescript
Hint
Use const numbers = [1, 2, 3]; to create the array.
2
Create a result array to store permutations
Create a variable called result and set it to an empty array to store all permutations.
DSA Typescript
Hint
Use const result: number[][] = []; to create an empty array for storing permutations.
3
Write the recursive permutation function
Write a recursive function called permute that takes two parameters: arr (array of numbers) and temp (array for current permutation). The function should generate all permutations of numbers and store them in result. Use permute(numbers, []) to start.
DSA Typescript
Hint
Use recursion to build permutations by adding numbers not yet in temp. When temp length equals arr length, add a copy of temp to result.
4
Print all permutations
Write a console.log(result) statement to print all generated permutations stored in result.
DSA Typescript
Hint
Use console.log(result) to display all permutations.
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 largest element in the array
Solution
Step 1: Understand permutations
Permutations are all possible ways to arrange elements in order.
Step 2: Apply to array
Generating all permutations means listing every possible order of the array elements.
Final Answer:
Listing all possible orders of the array elements -> Option A
Quick Check:
Permutations = all orders [OK]
Hint: Permutations = all ways to arrange elements [OK]
Common Mistakes:
Confusing permutations with sorting
Thinking permutations remove duplicates
Mixing permutations with finding max element
2. Which of the following TypeScript function signatures correctly represents a function that generates all permutations of an array of numbers?
easy
A. function permute(arr: number[][]): number[]
B. function permute(arr: number): number[]
C. function permute(arr: number[]): number[][]
D. function permute(arr: string[]): string
Solution
Step 1: Analyze input and output types
The input is an array of numbers, so type is number[]. The output is all permutations, which is an array of arrays of numbers, so number[][].
Step 2: Match function signature
function permute(arr: number[]): number[][] matches input number[] and output number[][] correctly.
Final Answer:
function permute(arr: number[]): number[][] -> Option C
Quick Check:
Input array, output array of arrays [OK]
Hint: Input array, output array of arrays for permutations [OK]
Common Mistakes:
Using single number instead of array as input
Returning a single array instead of array of arrays
Mixing string and number types incorrectly
3. What is the output of the following TypeScript code?
function permute(arr: number[]): number[][] {
if (arr.length === 0) return [[]];
const result: number[][] = [];
for (let i = 0; i < arr.length; i++) {
const rest = [...arr.slice(0, i), ...arr.slice(i + 1)];
for (const perm of permute(rest)) {
result.push([arr[i], ...perm]);
}
}
return result;
}
console.log(permute([1, 2]));
medium
A. [[1, 2], [2, 1]]
B. [[1, 2]]
C. [[2, 1]]
D. []
Solution
Step 1: Understand base case and recursion
Base case returns [[]] for empty array. For [1,2], it picks each element and permutes the rest.
Step 2: Trace recursive calls for [1,2]
First i=0: arr[i]=1, rest=[2], permute([2]) returns [[2]], so push [1,2]. Then i=1: arr[i]=2, rest=[1], permute([1]) returns [[1]], so push [2,1].
Final Answer:
[[1, 2], [2, 1]] -> Option A
Quick Check:
Permutations of [1,2] = [[1,2],[2,1]] [OK]
Hint: Check base case and recursive build-up [OK]
Common Mistakes:
Forgetting to include all permutations
Returning only one permutation
Confusing order of elements
4. Identify the error in this TypeScript function that attempts to generate all permutations of an array:
function permute(arr: number[]): number[][] {
if (arr.length === 1) return [arr];
const result: number[][] = [];
for (let i = 0; i < arr.length; i++) {
const rest = arr.slice(1);
for (const perm of permute(rest)) {
result.push([arr[i], ...perm]);
}
}
return result;
}
medium
A. The base case should return an empty array
B. The function should return a flat array, not nested arrays
C. The loop should start from 1 instead of 0
D. The slice should exclude the current element, not always the first
Solution
Step 1: Analyze the slice operation
The code uses arr.slice(1) always, which removes only the first element, not the current element at index i.
Step 2: Correct slice to exclude current element
To generate permutations correctly, slice should exclude arr[i], e.g., [...arr.slice(0, i), ...arr.slice(i + 1)].
Final Answer:
The slice should exclude the current element, not always the first -> Option D
Quick Check:
Exclude current element in slice [OK]
Hint: Slice must exclude current index element [OK]
Common Mistakes:
Always slicing from index 1 ignoring i
Wrong base case length check
Returning wrong data structure
5. Given an array with possible duplicate elements, how can you modify the permutation generation function to avoid duplicate permutations?
function permuteUnique(arr: number[]): number[][] {
// Your code here
}
hard
A. Use a Set to store all permutations after generation
B. Sort the array first and skip duplicates during recursion
C. Remove duplicates from the array before generating permutations
D. Generate permutations normally without any change
Solution
Step 1: Understand duplicate permutations problem
Duplicates in input cause repeated permutations if not handled.
Step 2: Sort and skip duplicates during recursion
Sorting helps group duplicates. During recursion, skip elements equal to previous to avoid repeated branches.
Step 3: Why other options fail
Using Set after generation is costly. Removing duplicates loses valid permutations. No change causes duplicates.
Final Answer:
Sort the array first and skip duplicates during recursion -> Option B
Quick Check:
Sort + skip duplicates = unique permutations [OK]
Hint: Sort array and skip duplicates in recursion [OK]
Common Mistakes:
Removing duplicates from input loses valid permutations
Using Set after generation wastes time and memory
Ignoring duplicates causes repeated permutations
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.