一个正整数的因数只有1、2、3、5和它本身,那么这个数就是丑数。那么丑数从小到大的序列为 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, … . 规定,1为最小的丑数。

问题:给出一个正整数n,找到第n个丑数。

方法一:
遍历所有正整数,判断其是否为丑数;
当丑数计数器count等于n时停止。

# Python3 code to find nth ugly number# This function divides a by greatest
# divisible power of b
def maxDivide(a,b):while a % b ==0:a = a /breturn a# Function to check if a number
# is ugly or not
def isUgly( no ):no = maxDivide(no,5)no = maxDivide(no,3)no = maxDivide(no,2)if no ==1:return 1return 0#return 1 if no==1 else 0# Function to get the nth ugly number
def getNthUglyNo(n):i = 1count =1  #ugly number count#Check for all integers untill#ugly count becomes nwhile n > count:i += 1if isUgly(i):count +=1return i#Drive code to test above functions
no = getNthUglyNo(9)
print('%d%s%d'%(no,'th ugly no. is ',no))

这种方法的时间复杂度比较高,因为需要遍历所有的正整数(在找到目标丑数之前);但是它的空间复杂度为O(1);

方法二:
丑数序列为 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, …
因为丑数都是2,3,5的倍数,因此我们可以把丑数序列分成三组:
(1) 1×2, 2×2, 3×2, 4×2, 5×2, …
(2) 1×3, 2×3, 3×3, 4×3, 5×3, …
(3) 1×5, 2×5, 3×5, 4×5, 5×5, …
我们观察到,三组数据其实是丑数序列ugly[]和2,3,5的乘积,即:
(1)ugly[] * 2
(2)ugly[] * 3
(3)ugly[] * 5
因此我们可以使用类似合并的方法将三个数组由小到大排列成一数组。

# python program to find the nth ugly number#查找第n个丑数的函数
def getNthUglyNo(n):ugly = [0] * n    #1、定一个数组按从小到大,存放丑数ugly[0] = 1       #2、初始化最小的丑数为1i2 = i3 = i5 = 0  #3、定义三个索引指向丑数序列的不同位置,分别作为2,3,5的乘数#构建三个序列,三个索引的前进速率不一样,i2最快,i5最慢next_multiple_of_2 = 2 * ugly[0]    #初始化三个序列的首位next_multiple_of_3 = 3 * ugly[0]next_multiple_of_5 = 5 * ugly[0]for l in range(1, n):# 每次选取三个序列中最小的数,放进丑数数组中ugly[l] = min(next_multiple_of_2, next_multiple_of_3, next_multiple_of_5)   #三个序列以此递增if ugly[l] == next_multiple_of_2:i2 += 1next_multiple_of_2 = ugly[i2] * 2if ugly[l] == next_multiple_of_3:i3 += 1next_multiple_of_3 = ugly[i3] * 3if ugly[l] == next_multiple_of_5:i5 += 1next_multiple_of_5 = ugly[i5] * 5return ugly[n - 1]  #返回丑数数组中的第n位丑数def main():n = 150print getNthUglyNo(n)if __name__ == '__main__':main()

Time Complexity: O(n)
Auxiliary Space: O(n)

使用Python找丑数相关推荐

  1. python找完数 pta_PTA——完全数

    PTA 7-45 找完数 网友"云上明月"的程序: #include int isPerfect(int num); int main() { int i,j,m,n,exist= ...

  2. java丑数算法_java实现找丑数

    题目描述 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. <参 ...

  3. python 找对称数

    [问题描述]已知10个四位数输出所有对称数及个数 n,例如1221.2332都是对称数 [输入形式]10个四位数,以空格分隔开 [输出形式]输入的四位数中的所有对称数,对称数个数 [样例输入]1221 ...

  4. Python | 动态规划解决“返回第n个丑数”

    本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章. 问题描述 给你一个整数 n ,请你找出并返回第 n 个 丑数 .丑数 就是只包含质因数 2.3 和/或 ...

  5. 洛谷P1246C语言,codevs1246 丑数

    题目描述 Description 对于一给定的素数集合 S = {p1, p2, ..., pK}, 来考虑那些质因数全部属于S 的数的集合.这个集合包括,p1, p1p2, p1p1, 和 p1p2 ...

  6. 面试题之丑数的C++实现求解(孤陋寡闻了,才知道丑数这么high的东东)

    问题描述: 我们把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第1500个丑数.( ...

  7. 丑数求解以及丑数的优化

    丑数: 丑数是指因子只有2,3,5的数 比如 6 因子2,3 比如 15 因子3,5 另外特别的,规定1为丑数 求第K个丑数? 最近在刷剑指offer的OJ时,在查找丑数的时候出现了超时的情况,特别记 ...

  8. Python循环嵌套应用案例一则:判断丑数

    问题描述:判断一个数字是否为丑数.一个数的因数如果只包含2.3.5,那么这个数是丑数(ugly number). 参考代码: def demo(n): for i in (2, 3, 5): whil ...

  9. python求完数的因子_「每日一练」巧用python找出1000以内的所有完数

    原标题:「每日一练」巧用python找出1000以内的所有完数 "完数"指的是一个数恰巧等于它的所有因子之和,比如说6,它的因子分别是1,2,3,而6正好等于1+2+3,所以6就是 ...

  10. 判断丑数python_LintCode Python 简单级题目 517.丑数

    题目描述: 写一个程序来检测一个整数是不是丑数. 丑数的定义是,只包含质因子 2, 3, 5 的正整数.比如 6, 8 就是丑数,但是 14 不是丑数以为他包含了质因子 7. 注意事项 可以认为 1  ...

最新文章

  1. 找出数组中被其他元素整除的元素_「每日一题」数组中重复的数字
  2. 实验室装水的容器叫什么_@实验员丨实验室超纯水机正确取水,你做到了吗?...
  3. wxWidgets:wxComboCtrl 示例
  4. Boost:GPU上的2D图像中绘制最终的随机“walk”,并使用OpenCV进行显示
  5. 从贪心选择到探索决策:基于强化学习的多样性排序
  6. 给缺少Python项目实战经验的人,赶紧收藏!
  7. 架构选型,究竟啥时候选redis?
  8. 如何定义 Java 中的方法
  9. 51nod-1065:最小正子段和
  10. MOSS Search学习记录(八):高级搜索定制(中)
  11. 六度分离(floyd算法,SPFA算法,最短路—Dijkstra算法)
  12. CephFS MDS服务 高可用
  13. 博客园屏蔽博文页面广告的方法
  14. 2021《微型计算机原理与接口技术》总复习
  15. 吴昊品游戏核心算法 Round 15 —— (转载)德州扑克中的心理战
  16. 看完这篇就全懂负载均衡了
  17. 现代数字调制及其应用
  18. 刮胡刀专用芯片AH6901(锂电池升压)+AH855B(单节充电芯片)
  19. vue组件之间传值几种方法
  20. 芯片驱动之充电芯片2

热门文章

  1. 开发本地O2O分销系统有什么优势 O2O电子商务模式有哪些特点?
  2. 清华大学软件学院考研经验分享
  3. x390开机键_【ThinkPadX390评测】ThinkPad X390 4G版全球首测:全时在线超长续航的便携商务利器(全文)_ThinkPad X390_笔记本评测-中关村在线...
  4. 如何检测浏览器是否安装了Adblock,uBlock Origin,Adguard,uBlock等广告屏蔽插件
  5. 电脑分屏操作,提高工作和学习效率
  6. Hadoop与Spark等大数据框架介绍
  7. 汉印HPRT HY80BT 打印机驱动
  8. 快速获取网站媒体资源方法
  9. 【toLua++】toLua++编译生成tolua++.exe史上完整版
  10. 移动web前端开发注意事项