LeetCode-in-All

46. Permutations

Medium

Given an array nums of 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:

Solution

#include <vector>

class Solution {
public:
    std::vector<std::vector<int>> permute(std::vector<int>& nums) {
        if (nums.empty()) {
            return {};
        }
        std::vector<std::vector<int>> finalResult;
        std::vector<int> currResult;
        std::vector<bool> used(nums.size(), false);
        permuteRecur(nums, finalResult, currResult, used);
        return finalResult;
    }

private:
    void permuteRecur(const std::vector<int>& nums, 
                      std::vector<std::vector<int>>& finalResult, 
                      std::vector<int>& currResult, 
                      std::vector<bool>& used) {
        if (currResult.size() == nums.size()) {
            finalResult.push_back(currResult);
            return;
        }
        for (size_t i = 0; i < nums.size(); ++i) {
            if (used[i]) {
                continue;
            }
            currResult.push_back(nums[i]);
            used[i] = true;
            permuteRecur(nums, finalResult, currResult, used);
            used[i] = false;
            currResult.pop_back();
        }
    }
};