Permutations

Generate all permutations of a unique-element array via DFS with in-place swap-based backtracking.

Medium
Time O(n * n!) Space O(n)
LeetCode
3 min read
subsets backtracking permutation

Problem#

Return all permutations of a unique-element array.

Examples#

  • [1,2,3][[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

Constraints#

  • 1 <= n <= 6.

Approach#

DFS via in-place swap. At depth d, for each i >= d, swap into position d, recurse, swap back.

Solution#

Permutations
class Solution {
public:
vector<vector<int>> permute(vector<int>& nums) {
vector<vector<int>> out;
function<void(int)> dfs = [&](int d){
if (d == (int)nums.size()) { out.push_back(nums); return; }
for (int i = d; i < (int)nums.size(); ++i) {
swap(nums[d], nums[i]);
dfs(d + 1);
swap(nums[d], nums[i]);
}
};
dfs(0);
return out;
}
};

Editorial#

Swap-based DFS avoids extra storage for a “used” bitmap and produces each permutation exactly once. The backtracking swap restores the array for the next sibling branch.

Complexity#

  • Time: O(n * n!).
  • Space: O(n) recursion.

Concept revision#

Search ESC

Keyboard shortcuts

Shortcuts are disabled while typing in inputs.