假设我们有一个长度为m的字符串,并且该字符串仅包含小写字母,我们必须按字典顺序查找字符串的第n个置换。

因此,如果输入类似于string =“ pqr”,n = 3,则输出将为“ qpr”,因为所有排列均为[pqr,prq,qpr,qrp,rpq,rqp],它们的排列顺序相同。

为了解决这个问题,我们将遵循以下步骤-MAX_CHAR:= 26

MAX_FACT:= 20

阶乘:=大小为MAX_FACT的数组

阶乘[0]:= 1

对于范围1至MAX_FACT的i,执行阶乘[i]:=阶乘[i-1] * i

大小:=字符串大小

出现:=大小为MAX_CHAR的数组,用0填充

对于介于0到大小范围内的i,执行事件[(string [i])的ASCII-('a')的ASCII]:=事件[(字符串[i])的ASCII-('a')的ASCII] + 1

res:=大小为MAX_CHAR的数组

和:= 0,k:= 0

虽然Sum与n不同,但是如果出现[i]与0相同,则

出现[i]:=出现[i]-1

temp_sum:=阶乘[大小-1-k]

对于范围0到MAX_CHAR的j,执行

总和:=总和+ temp_sum

如果Sum> = n,则

如果Sum

进行下一次迭代

temp_sum:= temp_sum / factorials [occurrence [j]](整数除法)

res [k]:=来自ASCII码的字符(i +('a')的ASCII)

n:= n-总和-temp_sum

k:= k + 1

从循环中出来发生[i]:=发生[i] +1

总和:= 0

对于0到MAX_CHAR范围内的i,执行

我:= MAX_CHAR-1

当k = 0时,res [k]:=来自ASCII码的字符(i +('a')的ASCII)

出现[i]:=出现[i]-1

我:=我+ 1

k:= k + 1

如果出现[i]不为零,则

我:=我-1

将字符串从res从索引0返回到(k-1)

示例

让我们看下面的实现以更好地理解-MAX_CHAR = 26

MAX_FACT = 20

factorials = [None] * (MAX_FACT)

def get_nth_permute(string, n):

factorials[0] = 1

for i in range(1, MAX_FACT):

factorials[i] = factorials[i - 1] * i

size = len(string)

occurrence = [0] * (MAX_CHAR)

for i in range(0, size):

occurrence[ord(string[i]) - ord('a')] += 1

res = [None] * (MAX_CHAR)

Sum = 0

k = 0

while Sum != n:

Sum = 0

for i in range(0, MAX_CHAR):

if occurrence[i] == 0:

continue

occurrence[i] -= 1

temp_sum = factorials[size - 1 - k]

for j in range(0, MAX_CHAR):

temp_sum = temp_sum // factorials[occurrence[j]]

Sum += temp_sum

if Sum >= n:

res[k] = chr(i + ord('a'))

n -= Sum - temp_sum

k += 1

break

if Sum

occurrence[i] += 1

i = MAX_CHAR-1

while k = 0:

if occurrence[i]:

res[k] = chr(i + ord('a'))

occurrence[i] -= 1

i += 1

k += 1

i -= 1

return ''.join(res[:k])

n = 3

string = "pqr"

print(get_nth_permute(string, n))

输入项"pqr"

输出结果qpr

python按字母顺序排列_在Python中按字符串的字母顺序查找第n个排列相关推荐

  1. python按字母顺序排列_在python中检查字符串是否按字母顺序排列

    我把以下代码放在一起,以检查字符串/单词是否按字母顺序排列: def isInAlphabeticalOrder(word): word1=sorted(word) word2=[] for i in ...

  2. python数字形式转换_在Python中将字母转换为数字

    在Python中将字母转换为数字 如何完成以下步骤? characters = ['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''t''u ...

  3. python手写字母识别_机器学习--kNN算法识别手写字母

    本文主要是用kNN算法对字母图片进行特征提取,分类识别.内容如下: kNN算法及相关Python模块介绍 对字母图片进行特征提取 kNN算法实现 kNN算法分析 一.kNN算法介绍 K近邻(kNN,k ...

  4. python 打印数组变量_使用Python将数组的元素导出到变量中(unpacking)

    下面就为大家分享一篇使用Python将数组的元素导出到变量中(unpacking),具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 最近工作中遇到一个问题,需要利用Python将数组(list ...

  5. python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议

    <Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  <Python之禅>中对于Pyt ...

  6. 以下选项中python用于异常处理结构_《Python 程序设计》复习题

    目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...

  7. python字符串大写字母个数_【python实例】统计字符串里大写字母,小写字母的个数和非字母的个数...

    """ 给定一个以下字符串:统计大写字母的个数,小写字母的个数,非字母的个数. str1 = "ajdkkKDKEK1343KFKiriromfkfKKRIOW ...

  8. python怎么更新数据库_在Python的Django框架中更新数据库数据的方法

    先使用一些关键参数创建对象实例,如下: >>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... ...

  9. 熊猫的python小课账号_学习python中的pandas有没有好的教程推荐?

    之前好多人私信我python数据分析怎么快速入门,我在这里直接介绍一下自己的心得经验吧. 要学习pandas,我并不建议看大量的教程,等看完教程,天都黑了,一觉醒来热情都凉了. 我的建议是,首先放平心 ...

最新文章

  1. CSS3的边框(border)属性-radius
  2. 牛博威:成熟的反外挂系统一般企业未必能承受
  3. 关于kubesphere metrics-server部署失败的问题
  4. lightgbm原理_LightGBM 原理及参数学习
  5. 谈谈我对攻读计算机研究生的看法(转一个牛人文章)
  6. android 转场动画 共享元素,Android-Animation-Set
  7. 前端工具,网址推荐,方便开发,学习。
  8. 黑苹果无线网卡的三种解决方案
  9. java 文件流 乱码_Java IO流之中文乱码
  10. java计算机毕业设计ssm+vue工商学院办公用品管理信息系统
  11. 回忆我的过去一年2020年考研以及研究生规划
  12. GI 中新的基础架构 --MDNS, gipc 和 gpnp 是如何协同工作的
  13. java 实现linux进度条,Linux实现的进度条一(基本知识学习和简单功能)
  14. BLE service, characteristic以及CCCD概念 9
  15. err = Problems with launching via XPC. XPC error : Connection interrupted (0x00000005)
  16. inflect java_驼峰、下划线、单复数、表名-类名转换...通通交给字符串处理库:i...
  17. 跨境卖家:如何让海外KOL营销达到理想效果?
  18. centos 中文乱码_StudingThinking_百度空间
  19. 2021年煤矿安全监测监控模拟试题及煤矿安全监测监控理论考试
  20. 全国计算机等级考试四级笔试样卷网络工程师

热门文章

  1. 点击页面上的按钮后更新TextView的内容,谈谈你的理解?(阿里面试题 参照Alvin笔记 Handler源码解析)
  2. php图片重复的,很强的PHP图片处理类
  3. 不朽凡人 第四百二十四章 再回半仙域
  4. 关闭Win10自动更新,只是微软商店用不了
  5. SQL数据库开发笔记
  6. 手机电路中的特殊元器件
  7. 计算机网络(第7版)谢希仁著 学习笔记
  8. 网络安全——使用反弹木马进行提权获取主机Shell
  9. 视觉SLAM十四讲 报错ch13 问题汇总 /usr/bin/ld: /usr/local/lib/libfmt.a(format.cc.o)
  10. eqep t法_TMS5704357BZWTQQ1