题目描述:

设计一个算法,找出只含素因子235 的第 n 小的数。

符合条件的数如:1, 2, 3, 4, 5, 6, 8, 9, 10, 12...

我们可以认为1也是一个丑数

如果n = 9, 返回 10

要求时间复杂度为O(nlogn)或者O(n)

代码实现:

class Solution:"""@param n: An integer@return: the nth prime number as description."""def nthUglyNumber(self, n):# write your code here'''num=0  #记录第几个只含素因子的数i=0  #记录第几个数j=1  #从1开始ans=0while num<n:ans = jwhile j / 2==1:j = j/2if j==1:num+=1j=1+anscontinuewhile j / 3 ==1:j = j/3if j==1:num+=1j=ans+1continuewhile j / 5 ==1:j = j/5if j==1:num+=1j=ans+1continuej=ans+1return ans#不知名得错误''''''i=1num=1while num<n:a=isUgly(i)i+=1if a:num +=1return idef isUgly(num):if num < 1:return Noneif num==1:return Truewhile num%2==0:num=num/2while num%3==0:num=num/3while num%5==0:num=num/5if num==1:return Truereturn False#运行超时'''#用堆heap,参考https://www.jiuzhang.com/solution/ugly-number-ii/#tag-highlight-lang-pythonimport heapqheap = [1]visited = set([1])val = Nonefor i in range(n):val = heapq.heappop(heap)for multi in [2,3,5]:if val*multi not in visited:visited.add(val*multi)heapq.heappush(heap,val*multi)return val

思路:

用堆来存储丑数,初始堆中只有一个1个丑数1,然后循环n次,每次从堆中取出一个丑数(堆顶上的值),用这个值分别乘以2,3,5,并将结果压到堆中,直到遍历到第n次,从堆中弹出的堆顶的值就是第n个丑数。同时将一个集合作为中间件,比较好判断乘的结果存不存在堆中。

注:堆又被称为优先队列,但队列中出队列是按照进队列的先后顺序取出元素,而堆是元素的优先级取出元素。堆的主要操作是插入和删除最小元素(元素值本身为优先级键值,小元素享有高优先级)。

丑数(输出第n个丑数)相关推荐

  1. 八进制数输出二进制c语言,C语言 某数输出二进制的某位

    如题: 输入一个整数,截取它对应的二进制位中从右到左的第8-11位(最右边为第0位). **输入格式要求:"%d" 提示信息:"请输入一个整数:" **输出格式 ...

  2. 将十进制数对应的八进制、十六进制、十进制数输出

    题目描述 输入一个十进制数,转换为对应的八进制.十六进制.十进制数输出 输入 输入一个十进制数 输出 输出该十进制数对应的八进制.十六进制.十进制数 样例输入 10 样例输出 oct:12 hex:a ...

  3. 丑数_题目1214:丑数

    //思路确实很巧,一般情况下很难想出来 题目描述: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求 ...

  4. ACMNO.3 有三个整数a b c,由键盘输入,输出其中的最大的数。 输入 一行数组,分别为a b c 输出 a b c其中最大的数 样例输入 10 20 30 样例输出 30

    基于平台Dev-C++ 5.11 题目描述 有三个整数a b c,由键盘输入,输出其中的最大的数. 输入 一行数组,分别为a b c 输出 a b c其中最大的数 样例输入 10 20 30 样例输出 ...

  5. 键盘录入一个正整数,把它的各个位上的数字倒着排列形成一个新的整数并输出。 例如:12345 数出54321 78760 输出6787(0省去)

    package com.coffn.demos; /*** 4.键盘录入一个正整数,把它的各个位上的数字倒着排列形成一个新的整数并输出.例如:12345 数出54321 78760 输出6787(0省 ...

  6. C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

    )输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...

  7. python输出1000以内回文数_「答案」python每日一题20201108

    质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.用python输出1000以内的所有质数. #####方法一#####def isPrime(n): if n <=1: r ...

  8. 信息学奥赛一本通(1235:输出前k大的数)——堆排序

    1235:输出前k大的数 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 12715     通过数: 4043 [题目描述] 给定一个数组,统计前k大的数并且把这 ...

  9. 输出前k大的数(信息学奥赛一本通-T1235)

    [题目描述] 给定一个数组,统计前k大的数并且把这k个数从大到小输出. [输入] 第一行包含一个整数n,表示数组的大小.n < 100000. 第二行包含n个整数,表示数组的元素,整数之间以一个 ...

  10. 99乘法表 (输入一个数,以该数为行数输出乘法表)

    <pre name="code" class="cpp">输入一个1~9的整数,输出该数之前的乘法表. 如:输入3,则输出为:1*1=11*2=2, ...

最新文章

  1. python文件和目录
  2. 谷歌、OpenAI 做了一个“魔性AI显微镜”,打算撬开人工智能黑箱
  3. Javascript:charCodeAt()方法及示例
  4. Go语言中的struct的初始化。
  5. 如何实现tm同时监控多个状态的改变_广电机房监控系统【斯必得智慧机房】
  6. Ubuntu下搭建Janus Server
  7. FCN Caffe:可视化featureMaps和Weights(C++)、获取FCN结果
  8. 一些常用正则表达式片段的分析
  9. WPF 代码设置NotifyIcon图标
  10. 【数码管识别】感兴趣区域提取和缩放的顺序问题
  11. matlab按图像边缘抠图_Ps最全十大抠图方法都在这,最后一种万能「值得收藏」...
  12. SSM物业管理系统毕业设计-附源码310928
  13. 智慧消防技术在安全管理中的应用
  14. mac os下可能是最好的豆瓣电台——diumoo
  15. css 加粗或斜体hover鼠标划过,导致异常闪动,整体宽度增加的解决办法
  16. 常用数字信号处理方法在matlab上的实现(目录和先导)
  17. SQL SERVER/ROW_NUMBER() OVER (ORDER BY id)高效分页
  18. 你想收到中国向世界发出的第一封电子邮件吗
  19. 4.2 Branching Strategies
  20. 计算机编程vb求最大公约数,VB求最大公约数的两个例子

热门文章

  1. android根据url加载图片路径,初学Android——通过URL加载图片
  2. 史上最小白之Bert详解
  3. Python的安装及环境配置
  4. 电脑开不了机计算机无法启动,电脑中毒了开不了机怎么回事_电脑中毒无法开机的解决步骤-win7之家...
  5. Python将两个列表合并成一个列表
  6. PS技能:人物带状穿插效果制作
  7. 单片机实例2——模拟开关灯(硬件电路图+汇编程序+C语言程序)
  8. 基于matlab振动信号处理,基于PC及MATLAB的振动信号处理的实现
  9. golang学习笔记-1
  10. 进程管理之进程优先级