Написано: 14.03.2023

46. Перестановки (Permutations)

medium

Задание.

Получен массив nums различных целых чисел.

Нужно вернуть все возможные перестановки.

Ответ можно вернуть в любом порядке.

Пример 1.

Входные данные: nums = [1,2,3]

Результат: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ]

Пример 2.

Входные данные: nums = [0,1]

Результат: [ [0,1], [1,0] ]

Пример 3.

Входные данные: nums = [1]

Результат: [ [1] ]

Решение.

class Solution {
private:
    vector<vector<int>> result;
    void permute(vector<int>& nums, int start) {
        int len = (int)nums.size();
        if (start == len - 1) {
            result.push_back(nums);
        } else {
            for (int i = start; i < len; i++) {
                if(i > start) { swap(nums[start], nums[i]); }
                permute(nums, start + 1);
                if(i > start) { swap(nums[start], nums[i]); }
            }
        }
        return;
    }
public:
    vector<vector<int>> permute(vector<int>& nums) {
        permute(nums, 0);
        return result;
    }
};