python按字母顺序排列_在Python中按字符串的字母顺序查找第n个排列
假设我们有一个长度为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个排列相关推荐
- python按字母顺序排列_在python中检查字符串是否按字母顺序排列
我把以下代码放在一起,以检查字符串/单词是否按字母顺序排列: def isInAlphabeticalOrder(word): word1=sorted(word) word2=[] for i in ...
- python数字形式转换_在Python中将字母转换为数字
在Python中将字母转换为数字 如何完成以下步骤? characters = ['a''b''c''d''e''f''g''h''i''j''k''l''m''n''o''p''q''r''t''u ...
- python手写字母识别_机器学习--kNN算法识别手写字母
本文主要是用kNN算法对字母图片进行特征提取,分类识别.内容如下: kNN算法及相关Python模块介绍 对字母图片进行特征提取 kNN算法实现 kNN算法分析 一.kNN算法介绍 K近邻(kNN,k ...
- python 打印数组变量_使用Python将数组的元素导出到变量中(unpacking)
下面就为大家分享一篇使用Python将数组的元素导出到变量中(unpacking),具有很好的参考价值,希望对大家有所帮助.一起过来看看吧 最近工作中遇到一个问题,需要利用Python将数组(list ...
- python之禅 中文_《Python之禅》中对于Python编程过程中的一些建议
<Python之禅>中对于Python编程过程中的一些建议 来源:中文源码网 浏览: 次 日期:2018年9月2日 [下载文档: <Python之禅>中对于Pyt ...
- 以下选项中python用于异常处理结构_《Python 程序设计》复习题
目录 填空题 一.基础知识 二.序列 三.选择结构与循环结构和函数及面向对象.文件 选择题 一.Python 基础语法 二.基本数据类型 三.程序的控制结构 四.函数和代码复用 五.组合数据类型 六. ...
- python字符串大写字母个数_【python实例】统计字符串里大写字母,小写字母的个数和非字母的个数...
""" 给定一个以下字符串:统计大写字母的个数,小写字母的个数,非字母的个数. str1 = "ajdkkKDKEK1343KFKiriromfkfKKRIOW ...
- python怎么更新数据库_在Python的Django框架中更新数据库数据的方法
先使用一些关键参数创建对象实例,如下: >>> p = Publisher(name='Apress', ... address='2855 Telegraph Ave.', ... ...
- 熊猫的python小课账号_学习python中的pandas有没有好的教程推荐?
之前好多人私信我python数据分析怎么快速入门,我在这里直接介绍一下自己的心得经验吧. 要学习pandas,我并不建议看大量的教程,等看完教程,天都黑了,一觉醒来热情都凉了. 我的建议是,首先放平心 ...
最新文章
- CSS3的边框(border)属性-radius
- 牛博威:成熟的反外挂系统一般企业未必能承受
- 关于kubesphere metrics-server部署失败的问题
- lightgbm原理_LightGBM 原理及参数学习
- 谈谈我对攻读计算机研究生的看法(转一个牛人文章)
- android 转场动画 共享元素,Android-Animation-Set
- 前端工具,网址推荐,方便开发,学习。
- 黑苹果无线网卡的三种解决方案
- java 文件流 乱码_Java IO流之中文乱码
- java计算机毕业设计ssm+vue工商学院办公用品管理信息系统
- 回忆我的过去一年2020年考研以及研究生规划
- GI 中新的基础架构 --MDNS, gipc 和 gpnp 是如何协同工作的
- java 实现linux进度条,Linux实现的进度条一(基本知识学习和简单功能)
- BLE service, characteristic以及CCCD概念 9
- err = Problems with launching via XPC. XPC error : Connection interrupted (0x00000005)
- inflect java_驼峰、下划线、单复数、表名-类名转换...通通交给字符串处理库:i...
- 跨境卖家:如何让海外KOL营销达到理想效果?
- centos 中文乱码_StudingThinking_百度空间
- 2021年煤矿安全监测监控模拟试题及煤矿安全监测监控理论考试
- 全国计算机等级考试四级笔试样卷网络工程师
热门文章
- 点击页面上的按钮后更新TextView的内容,谈谈你的理解?(阿里面试题 参照Alvin笔记 Handler源码解析)
- php图片重复的,很强的PHP图片处理类
- 不朽凡人 第四百二十四章 再回半仙域
- 关闭Win10自动更新,只是微软商店用不了
- SQL数据库开发笔记
- 手机电路中的特殊元器件
- 计算机网络(第7版)谢希仁著 学习笔记
- 网络安全——使用反弹木马进行提权获取主机Shell
- 视觉SLAM十四讲 报错ch13 问题汇总 /usr/bin/ld: /usr/local/lib/libfmt.a(format.cc.o)
- eqep t法_TMS5704357BZWTQQ1