Menu
CoddyTech

Permutations

Дан список nums различных целых чисел. Верните все перестановки этих значений — каждая должна быть списком, в котором каждое значение встречается ровно один раз, поэтому для n значений получится n! перестановок. Перечислите их в лексикографическом порядке: сравнивайте две перестановки по позициям, и порядок определяет первое различие. Для [1, 2, 3] это означает, что первой будет [1, 2, 3], а последней — [3, 2, 1].

Функция

permute(nums: integer-array) → integer-2d-array
numsinteger-array
значения, все разные, в любом порядке
Возвращаетinteger-2d-array
каждое упорядочение значений, перечисленное в лексикографическом порядке

Ограничения

  • 1 ≤ nums.length ≤ 6
  • -10 ≤ nums[i] ≤ 10
  • Все значения в nums различны.
  • nums могут располагаться в любом порядке.

Примеры

Ввод
nums = [3, 1, 2]
Вывод
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]
Пояснение
У трёх значений есть 3! = 6 вариантов упорядочивания. В отсортированном виде значения равны 1, 2, 3, поэтому сначала идут варианты, начинающиеся с 1, а [1, 2, 3] идёт перед [1, 3, 2], потому что 2 меньше 3 на второй позиции. Порядок входных данных не имеет значения.

lock icon+13 скрытых тестов при отправке

challenge icon

Дополнительный вопрос

Имея одну последовательность, можешь ли ты получить следующую в лексикографическом порядке на месте за время O(n) и с использованием O(1) дополнительной памяти?

Сбросить код
def permute(nums):
    # Напишите код здесь
Тестовые случаи

Случай 1

Случай 2

Случай 3

Ввод

nums = [3, 1, 2]

Ожидается

[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]]