程序在python中找到第k个最小n长度的字典上最小的字符串
假设我们有一个数字n和另一个值k。现在让我们考虑一个仅包含“0”,“1”和“2”的字符串,其中不连续重复字符。我们必须选择长度为n的此类字符串,并找到第k个按字典顺序最小的字符串。如果没有第k个字符串,则返回空字符串。
因此,如果输入类似于n=4k=2,则输出将为“0120”。
为了解决这个问题,我们将按照以下步骤操作:
定义一个solve()
将采用s,k和last的方法
如果s与0相同,则
返回空白字符串
对于“012”中的每个字符c,执行
返回c+solve(s-1,k,c)
进行下一次迭代
如果c与最后一个相同,则
如果k<2^(s-1),则
k:=k-2^(s-1)
返回空白字符串
从主要方法中调用solve(n,k,Null)
让我们看下面的实现以更好地理解:
范例程式码
class Solution: def solve(self, s, k, last=None): if s == 0: return "" for c in "012": if c == last: continue if k < 2 ** (s - 1): return c + self.solve(s - 1, k, c) k -= 2 ** (s - 1) return "" ob = Solution()n = 4 k = 2 print(ob.solve(n, k))
输入值
4, 2
输出结果
0120