Skip to content

Files

Latest commit

Jun 24, 2024
58c9aff · Jun 24, 2024

History

History

s0046_permutations

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Jun 24, 2024

readme.md

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:

  • 1 <= nums.length <= 6
  • -10 <= nums[i] <= 10
  • All the integers of nums are unique.

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();
        }
    }
};