- Data Structure
- Networking
- RDBMS
- Operating System
- Java
- MS Excel
- iOS
- HTML
- CSS
- Android
- Python
- C Programming
- C++
- C#
- MongoDB
- MySQL
- Javascript
- PHP
- Physics
- Chemistry
- Biology
- Mathematics
- English
- Economics
- Psychology
- Social Studies
- Fashion Studies
- Legal Studies
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Program to find kth lexicographic sequence from 1 to n of size k Python
Suppose we have two values n and k. Now consider a list of numbers in range 1 through n [1, 2, ..., n] and generating every permutation of this list in lexicographic sequence. For example, if n = 4 we have [1234, 1243, 1324, 1342, 1423, 1432, 2134, 2143, 2314, 2341, 2413, 2431, 3124, 3142, 3214, 3241, 3412, 3421, 4123, 4132, 4213, 4231, 4312, 4321]. We have to find the kth value of this permutation sequence as a string.
So, if the input is like n = 4 k = 5, then the output will be "1432"
To solve this, we will follow these steps −
Define a function factors() . This will take num
quo := num
res := a double ended queue and insert 0 at beginning
i := 2
while quo is not empty, do
quo := quotient of (quo / i), rem := quo mod i
insert rem at the left of res
i := i + 1
return res
From the main method do the following −
numbers := a list with values 1 through n
res := blank string
k_fact := factors(k)
while size of k_fact < size of numbers, do
res := res concatenate first element of numbers as string, then delete first element of numbers
for each index in k_fact, do
number := index−th element of numbers, then remove that element
res := res concatenate number
return res
Let us see the following implementation to get better understanding −
Example
from collections import deque def factors(num): quo = num res = deque([0]) i = 2 while quo: quo, rem = divmod(quo, i) res.appendleft(rem) i += 1 return res class Solution: def solve(self, n, k): numbers = [num for num in range(1, n + 1)] res = "" k_fact = factors(k) while len(k_fact) < len(numbers): res += str(numbers.pop(0)) for index in k_fact: number = numbers.pop(index) res += str(number) return res ob = Solution() n = 4 k = 5 print(ob.solve(n, k))
Input
4, 5
Output
1432