Проблема
Учитывая массив nums
различных целых чисел, вернуть все возможные перестановки. Вы можете вернуть ответ в любом порядке.
Пример 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]]
Пример 2:
Input: nums = [0,1] Output: [[0,1],[1,0]]
Пример 3:
Input: nums = [1] Output: [[1]]
Ограничения:
1 <= nums.length <= 6
-10 <= nums[i] <= 10
- Все целые числа
nums
уникальны.
Решение
Это очень похоже на последнюю проблему (комбинации). Я использую рекурсивную вспомогательную функцию, чтобы построить все возможные перестановки.
- Нам понадобится два контейнера: один для финальных комбинаций, а другой для хранения временных комбинаций во время сборки.
- Внутри внутренней рекурсивной функции наш базовый случай будет, когда массив опций пуст. Массив параметров начинается с того же значения, что и nums.
- Внутри внутренней рекурсивной функции цикл for запустит процесс сборки. В каждом цикле мы будем хранить текущее добавляемое число, помещая его в наш временный комбинированный массив. Затем мы можем соединить это число из нашего массива параметров и выполнить рекурсивный вызов. Мы просто добавили новое число в наш массив и рекурсивно отправили оставшиеся числа во внутреннюю функцию, чтобы их можно было добавить.
- После выполнения рекурсивного вызова нам нужно позаботиться о некоторых других делах внутри цикла for. Нам нужно удалить последнее значение, чтобы мы могли добавить другие числа из нашего массива параметров в ту же позицию по одному.
- Помните номер, который мы сохранили на шаге 3? Теперь нам нужно снова вставить это обратно в массив параметров.
На несколько шагов больше, чем проблема комбинаций, но в целом очень похожий подход.