package
0.0.0-20241221191246-b80a13d7bbe0
Repository: https://github.com/yvv4git/go-algorithms.git
Documentation: pkg.go.dev
# README
60. Permutation Sequence
Level - hard
Task
The set [1, 2, 3, ..., n] contains a total of n! unique permutations.
By listing and labeling all of the permutations in order, we get the following sequence for n = 3:
- "123"
- "132"
- "213"
- "231"
- "312"
- "321"
Given n and k, return the kth permutation sequence.
Объяснение
Это задача на нахождение k-й последовательности перестановки из n чисел.
Перестановка - это упорядоченная выборка из множества.
Например, для n = 3 (1, 2, 3), всевозможные перестановки: "123", "132", "213", "231", "312", "321".
Задача состоит в том, чтобы найти k-ю перестановку в лексикографическом порядке. Лексикографический порядок - это общепринятый алфавитный порядок, используемый для упорядочения слов в словарях.
Например, для n = 3 и k = 3, ответ будет "213".
Чтобы решить эту задачу, можно использовать следующий алгоритм:
- Сначала вычислить факториалы чисел от 0 до n. Это можно сделать заранее, так как факториалы не изменяются для одного и того же n.
- Затем создать список чисел от 1 до n, который будет использоваться для формирования перестановок.
- Инициализировать пустую строку, которая будет содержать k-ю перестановку.
- Вычислить индекс первого символа k-й перестановки, используя факториалы и деление k на соответствующий факториал.
- Добавить в строку найденный символ из списка чисел и удалить его из списка.
- Обновить k, уменьшив его на найденный индекс, умноженный на соответствующий факториал.
- Повторять шаги 4-6, пока не будет получена k-я перестановка.
- Вернуть полученную строку как k-ю перестановку.
Example 1:
Input: n = 3, k = 3
Output: "213"
Example 2:
Input: n = 4, k = 9
Output: "2314"
Example 3:
Input: n = 3, k = 1
Output: "123"
Constraints:
- 1 <= n <= 9
- 1 <= k <= n!