Python程序:查找字典序第k小的n长度字符串
假设我们有一个数字n和另一个值k。现在让我们考虑一个仅包含“0”,“1”和“2”的字符串,其中没有字符连续重复。我们必须选择长度为n的此类字符串并找到字典序第k小的字符串。如果没有第k个字符串,则返回空字符串。
因此,如果输入类似于n = 4 k = 2,则输出将为“0120”。
为了解决这个问题,我们将遵循以下步骤
- 定义一个方法solve(),它将接收s、k和last
- 如果s等于0,则
- 返回空字符串
- 对于“012”中的每个字符c,执行以下操作
- 如果c等于last,则
- 进行下一次迭代
- 如果k < 2^(s-1),则
- 返回c + solve(s - 1, k, c)
- k := k - 2^(s-1)
- 如果c等于last,则
- 返回空字符串
- 从主方法调用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
广告
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP