Mastering LeetCode: Generating All Permutations of an Array
A Step-by-Step Guide to Solving the Permutations Problem Using Backtracking in Python

Introduction
Generating permutations is a fundamental problem in computer science, often appearing in coding interviews and algorithm challenges. Understanding how to efficiently generate permutations can provide insights into various combinatorial problems and improve your problem-solving skills.
In this article, we'll explore the "Permutations" problem on LeetCode and solve it using a backtracking approach.
LeetCode Problem Statement:
Given an array
numsof distinct integers, return all the possible permutations. You can return the answer in any order.Example 1:
Input: nums = [1,2,3] Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]Example 2:
Input: nums = [0,1] Output: [[0,1],[1,0]]Example 3:
Input: nums = [1] Output: [[1]]Constraints:
1 <= nums.length <= 6
-10 <= nums[i] <= 10All the integers of
numsare unique.
Understanding Permutations
Permutations refer to all possible arrangements of a set of elements. For an array of n distinct elements, there are n! (n factorial) possible permutations. Generating these permutations is useful in various applications, including solving puzzles, optimizing routes, and more.
Solution Approach
To solve the permutations problem, we'll use a backtracking approach. Backtracking is an algorithmic technique for solving recursive problems by trying to build a solution incrementally and removing solutions that fail to satisfy the problem constraints.
Detailed Solution Breakdown
Step 1: Function Definition
We'll start by defining the main function permute that will take the list of integers nums as input and return a list of lists containing all possible permutations.
Step 2: Helper Function
We'll define a helper function backtrack that will be used to generate permutations by swapping elements. This function will take the current position start as an argument.
Step 3: Swapping Elements
In the backtrack function, we'll loop through the elements starting from the start index to the end of the list. For each index i, we'll swap the elements at indices start and i, recursively call backtrack with the next position start + 1, and then swap the elements back to their original positions.
Code Implementation
Here's the complete Python code for generating permutations:
from typing import List
def permute(nums: List[int]) -> List[List[int]]:
def backtrack(start: int):
if start == len(nums):
result.append(nums[:])
for i in range(start, len(nums)):
nums[start], nums[i] = nums[i], nums[start] # swap
backtrack(start + 1)
nums[start], nums[i] = nums[i], nums[start] # swap back
result = []
backtrack(0)
return result
# Test cases
print(permute([1, 2, 3])) # Output: [[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]
print(permute([0, 1])) # Output: [[0,1],[1,0]]
print(permute([1])) # Output: [[1]]
Explanation of the Code
Function Definition:
- The
permutefunction takes a listnumsand returns a list of lists containing all permutations.
- The
Backtracking Function:
We define a nested function
backtrackthat takes the current positionstartas an argument.If
startequals the length ofnums, we've reached a complete permutation, so we append a copy ofnumsto theresultlist.
Swapping Elements:
We loop through the elements starting from the
startindex.For each index
i, we swap the elements at indicesstartandi.We recursively call
backtrackwithstart + 1.After the recursive call, we swap the elements back to their original positions.
Result Storage:
We initialize an empty list
resultto store all permutations.We call
backtrackstarting from index 0.Finally, we return the
resultlist containing all permutations.

Time Complexity Analysis
The time complexity of this solution is O(n * n!), where n is the length of the input list. This is because there are n! permutations, and we need to copy each permutation of length n to the result list. Given the constraint (1 <= nums.length <= 6), this complexity is acceptable.
Common Questions and Pitfalls
Q1: What is the maximum length of the input list?
- A1: The length of the input list is between 1 and 6.
Q2: Are duplicate elements allowed in the input list?
- A2: No, all integers in the input list are unique.
Q3: Why use backtracking for this problem?
- A3: Backtracking efficiently explores all possible permutations by making choices and undoing them when necessary.
FAQ Section
What is the maximum length of the input list?
The input list can have a length between 1 and 6.
Are duplicate elements allowed in the input list?
No, all integers in the input list must be unique.
Why use backtracking for this problem?
Backtracking is efficient for generating all permutations by making choices and backtracking to previous states when necessary.
Conclusion
Generating permutations is a classic problem that can be efficiently solved using a backtracking approach. By understanding and implementing the solution step-by-step, you can enhance your problem-solving skills and tackle similar combinatorial problems with confidence.
Practice more permutation problems to deepen your understanding and improve your coding abilities.




