Условие

Дан массив уникальных целых чисел 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]]

Решение

Для решения этой задачи мы можем использовать рекурсивный алгоритм. Мы можем начать с пустого списка и добавлять элементы из nums по одному. Когда мы добавляем новый элемент, мы рекурсивно вызываем функцию для оставшихся элементов. Мы продолжаем этот процесс до тех пор, пока не закончатся элементы. Когда мы доходим до конца, мы добавляем текущий список в список результатов.

Шаги решения:

  1. Создайте функцию permute(nums), которая принимает массив nums как аргумент и возвращает список всех возможных перестановок.
  2. Внутри функции permute(nums) создайте пустой список res для хранения всех возможных перестановок.
  3. Создайте вспомогательную функцию dfs(path, nums, res), которая будет использоваться для построения перестановок рекурсивно. Она принимает три аргумента: path - текущий путь, nums - оставшиеся элементы, res - список результатов.
  4. В функции dfs(path, nums, res) проверьте, если nums пустой, добавьте текущий путь path в список результатов res.
  5. Если nums не пустой, создайте цикл for для перебора элементов в nums.
  6. В цикле for добавьте текущий элемент nums[i] в path.
  7. Сделайте рекурсивный вызов dfs(path, nums[:i]+nums[i+1:], res) для оставшихся элементов.
  8. Удалите последний элемент из path с помощью метода pop().