程序从k到1到n的k个字典中查找第k个字典顺序
假设我们有两个值n和k。现在考虑范围为1到n[1、2,...,n]的数字列表,并按词典顺序生成此列表的每个排列。例如,如果n=4,则我们有[1234、1243、1324、1342、1423、1432、2134、2143、2314、2341、2413、2431、3124、3142、3214、3241、3421、3412、3421、4123、4132,4213、4231、4312、4321]。我们必须找到此排列序列的第k个值作为字符串。
因此,如果输入类似于n=4k=5,则输出将为“1432”
为了解决这个问题,我们将遵循以下步骤-
定义一个功能factors()。这将需要num
quo:=num
res:=双头队列,并在开头插入0
我:=2
虽然现状不为空,但是
quo:=(quo/i)的商,rem:=quomodi
在res的左边插入rem
我:=我+1
返回资源
从主要方法中执行以下操作-
数字:=值从1到n的列表
res:=空字符串
k_fact:=factors(k)
而k_fact的大小<数字的大小,
res:=res将数字的第一个元素连接为字符串,然后删除数字的第一个元素
对于k_fact中的每个索引,执行
number:=第index个数字元素,然后删除该元素
res:=res连接数
返回资源
让我们看下面的实现以更好地理解-
示例
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))输入值
4, 5输出结果
1432