求4个数字组成的不重复三位数,Python简洁解法

求4个数字组成的不重复三位数,Python解法

题目要求:
求所有由5,6,7,8组成的数字不重复的三位数

不重复的三位数,即不能出现555,566这种

通过分析,可以使用画树的方法来确定要求的三位数的值与个数
在这里插入图片描述
按照上图所示可以确定由5,6,7,8共可以组成24个不重复的三位数
于是写出Python代码如下:

class Solution:def noRepeatTriplets(self, strs='5678'):global nfirst, sub_str = strs[0], strs[1:]strs = sub_str + first  # 调换顺序用作下一轮运算时使用for i in range(len(sub_str)):for x in sub_str[:i] + sub_str[i + 1:]:s = first + sub_str[i] + xn += 1print(s, f'已输出次数:{n}')if strs == '5678':  # 再次回到5678则结束运算returnself.noRepeatTriplets(strs)n = 0
T = Solution()
T.noRepeatTriplets()

输出共24种:

567 已输出次数:1
568 已输出次数:2
576 已输出次数:3
578 已输出次数:4
586 已输出次数:5
587 已输出次数:6
678 已输出次数:7
675 已输出次数:8
687 已输出次数:9
685 已输出次数:10
657 已输出次数:11
658 已输出次数:12
785 已输出次数:13
786 已输出次数:14
758 已输出次数:15
756 已输出次数:16
768 已输出次数:17
765 已输出次数:18
856 已输出次数:19
857 已输出次数:20
865 已输出次数:21
867 已输出次数:22
875 已输出次数:23
876 已输出次数:24

时间复杂度和给出的数字位数d有关,两次for循环次数数量级都是d(都是循环d-1次),递归的次数也是d-1次,因此时间复杂度为O(d³)

以上方法也可以用于3位数或5位数,只需要将5678改成567或56789
如‘56789’(12×5=60种):

class Solution:def noRepeatTriplets(self, strs='56789'):global nfirst, sub_str = strs[0], strs[1:]strs = sub_str + first  # 调换顺序用作下一轮运算时使用for i in range(len(sub_str)):for x in sub_str[:i] + sub_str[i + 1:]:s = first + sub_str[i] + xn += 1print(s, f'已输出次数:{n}')if strs == '56789':  # 再次回到56789则结束运算returnself.noRepeatTriplets(strs)n = 0
T = Solution()
T.noRepeatTriplets()

56789对应输出的60种不重复三位数:

567 已输出次数:1
568 已输出次数:2
569 已输出次数:3
576 已输出次数:4
578 已输出次数:5
...
976 已输出次数:56
978 已输出次数:57
985 已输出次数:58
986 已输出次数:59
987 已输出次数:60

这是我能想到的较容易理解的方法
如果你有更简单易懂的方法,欢迎一起评论交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像目标分割_3 SegNet + U-Net

6.3.1 SegNet背景 SegNet的主要动机是场景理解的应用。 难点:因此它在设计的时候考虑了要在预测期间保证内存和计算时间上的效率。分割的任务其实应用非常地广,需要理解各个像素之间的关系,比如要区分出人行道和车行道,建筑物和…

MIPI屏数据发送命令解析

MIPI数组发送那里有一个数组,这个数组包含寄存器和寄存器的值: 相当于: 0XC480寄存器下参数0X9C; 0XFF00寄存器下参数0XFF,0XFF,0XFF; 0XC0B5 尝试一下寄存器 0x08 0x18 0x48 0x58 试一下能不能旋转

面向对象之类的内建函数

类的特殊成员 上文介绍了Python的类成员以及成员修饰符,从而了解到类中有字段、方法和属性三大类成员,并且成员名前如果有两个下划线,则表示该成员是私有成员,私有成员只能由类内部调用。无论人或事物往往都有不按套路出牌的情况&…

图像目标分割_4 DeepLab-V1

6.4.1 DeepLab 背景 相比于传统的视觉算法(SIFT或HOG),Deep-CNN以其end-to-end方式获得了很好的效果。这样的成功部分可以归功于Deep-CNN对图像转换的平移不变性(invariance),这根本是源于重复的池化和下采样组合层。平移不变性增强了对数据分层抽象的能…

Python多线程单例的几种实现方式

目录: 单例模式在类中实现装饰器批量装饰实现单例模式 ,且不丢失类型提示限制实例个数 1.重写__new__方法实现多线程情况下的单例模式 用new方法实现单例模式 import time, threadingclass Singleton:"""单例模式————最多只允许创…

图像目标分割_5 DeepLab V2 V3 V3+

6.5.1 DeepLab V2 6.5.1.1 改变特点 atrous convolution采用ASPP ( atrous spatial pyramid pooling) 多尺度获得更好的分割效果合并深度卷积网络和概率图模型方法,增强对物体边界的定位。基础层由VGG16转为ResNet 和v1不同: 通过多尺度输入处理或者多…

jQuery / zepto ajax 全局默认设置

jQuery / zepto 的 $.ajax 方法需要配置很多选项, 有些是很常用的每个 ajax 请求都要用到的, 可以全局设置, 避免每次都写. 注意: 此处用的 jQuery 版本是 1.8.3, zepto 版本是 1.1.6 和 1.2.0. 使用别的版本的要自己测试下. jQuery 的方法是 jQuery.ajaxSetup() $.ajaxSetup(…

Python导包、模块报错的问题

import报错No module named "xxx"的问题 如何将指定目录作为项目根目录,让项目根目录下的包/模块都可以直接导入?(linux下) Python导入模块时,解释器如何定位模块: 1.当前目录 2.内置模块列表 3…

CC2540 串口0 通道2配置

从图里面可以看出来,串口0有两个通道,一个通道是P02 P03两个GPIO口。 还有一个通道是P14 P15两个GPIO口。 在软件配置的时候,主要是配置的是一个通道相关的寄存器。 7.6.4 USART 0 The SFR register bit PERCFG.U0CFG selects whether to u…

图像目标分割_6 Mask RCNN

6.6.0 背景 目标检测和语义分割的效果在短时间内得到了很大的改善。在很大程度上,这些进步是由强大的基线系统驱动的,例如,分别用于目标检测和语义分割的Fast/Faster R-CNN和全卷积网络(FCN)框架。这些方法在概念上是直观的,提供…

cf 621E. Wet Shark and Blocks

神奇,矩阵乘法23333333333333333 递推式是很简单的(连我这种不会DP的人都写出来了。) 需要求出的是转移矩阵(还是叫系数矩阵的),也是最这个东西用快速幂。 这个东西的i,j大概就表示从i到j的方案…

Python enum的使用总结

Python enum的使用总结 枚举(enumeration)在许多编程语言中常被表示为一种基础的数据结构使用,枚举帮助组织一系列密切相关的成员到同一个群组机制下,一般各种离散的属性都可以用枚举的数据结构定义,比如颜色、季节、国家、时间单位等 在Pyt…

ascii码转字符

在C语言中,ASCII码转字符非常简单。但是之前因为没有用到就没有去关注这方面的问题。 printf("%c\n",char(69)); E 下面是ASCII码表: BinDecHex缩写/字符解释0000 0000000NUL(null)空字符0000 0001101SOH(start of headline)标题开始0000…

SCI论文写作训练营笔记汇总01_概述+文献检索与管理

1 概述 1.1 适用人群 ①初涉科研, 目前或将来有英文科技论文发表需求的科研工作者 ②正在撰写或准备撰写英文科技论文的科研工作者 1.2 科技论文的基本结构 1.3 科技论文组成部分的写作方法 1.4 阅读文献的重要性 2、文献检索与管理 2.1 如何查找文献参考 2.2 文…

天猫11.11:搜索引擎实时秒级更新(转载)

搜索是很多用户在天猫购物时的第一入口,搜索结果会根据销量、库存、人气对商品进行排序,而商品的显示顺序往往会决定用户的选择,所以保证搜索结果的实时性和准确性非常重要。在电商系统中,特别是在“双十一”这样的高并发场景下&a…

pandas处理日期的几种常用方法

1.读取字符串日期 写入csv 文件 csv_text """date, value 2022-01-01, 1 2022-01-05, 5 2022-11-05, 5 """ with open("date_text.csv", "w") as f:f.write(csv_text)读取日期 df pd.read_csv("date_text.csv"…

OAD 空中升级

http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/p/69222/172351.aspx#172351第二十三节 OAD空中升级 通过仿真器更新程序或者通过USB更新固件那都是一般人都可以实现的操作,但是要想实现OAD空中升级…

SCI论文写作训练营笔记汇总02_英文科技论文阅读与解析

3、英文科技论文阅读与解析的方法 3.1 科技论文介绍 3.1.1 科技论文的类型 • Research • Review • Theoretical • Methodological • Case study 3.1.2 研究型论文的结构 3.1.3 科技论文的基本结构 3.2 文献阅读 3.2.1 文献选择的原则 3.2.2 文献阅读顺序 3.2.2 文献阅读…

9.带有返回值的函数

<!DOCTYPE html><html><body> <p>本例调用的函数会执行一个计算&#xff0c;然后返回结果&#xff1a;</p> <p id"demo"></p> <script>function myFunction(a,b){return a*b;} document.getElementById("demo&…

报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused

&#xff08;pyenv install xxx&#xff09; 报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused的解决方法 问题重现截图&#xff1a; 在查看下面的原因和使用解决方法之前&#xff0c;确保自己的pyenv已经安装好了最新的python-build&#xff0c…