剑指Offer(三十三):丑数

搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法、机器学习干货

csdn:https://blog.csdn.net/baidu_31657889/

github:https://github.com/aimi-cn/AILearners

一、引子

这个系列是我在牛客网上刷《剑指Offer》的刷题笔记,旨在提升下自己的算法能力。

查看完整的剑指Offer算法题解析请点击CSDN和github链接:

剑指Offer完整习题解析CSDN地址

github地址

二、题目

把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。

1、思路

所谓的一个数m是另一个数n的因子,是指n能被m整除,也就是n%m==0。根据丑数的定义,丑数只能被2、3和5整除。根据丑数的定义,丑数应该是另一个丑数乘以2、3或者5的结果(1除外)。因此我们可以创建一个数组,里面的数字是排好序的丑数,每一个丑数都是前面的丑数乘以2、3或者5得到的。

这个思路的关键问题在于怎样保证数组里面的丑数是排好序的。对乘以2而言,肯定存在某一个丑数T2,排在它之前的每一个丑数乘以2得到的结果都会小于已有最大的丑数,在它之后的每一个丑数乘以乘以2得到的结果都会太大。我们只需要记下这个丑数的位置,同时每次生成新的丑数的时候,去更新这个T2。对乘以3和5而言,也存在着同样的T3和T5。

2、编程实现

python

代码实现方案:

# -*- coding:utf-8 -*-
class Solution:
def GetUglyNumber_Solution(self, index):
# write code here
if index < 7:
return index
res = [1, 2, 3, 4, 5, 6]
# res[t2]=4 4*2=8 大于res里面4*1的值 res[t3]=3 3*3=9 大于res里面3*2的值 res[t5]=2 5*2=10 大于res里面5*1的值
t2, t3, t5 = 3, 2, 1
for i in range(6, index):
res.append(min(res[t2] * 2, res[t3] * 3, res[t5] * 5))
while res[t2] * 2 <= res[i]:
t2 += 1
while res[t3] * 3 <= res[i]:
t3 += 1
while res[t5] * 5 <= res[i]:
t5 += 1
return res[index - 1]

AIMI-CN AI学习交流群【1015286623】 获取更多AI资料

分享技术,乐享生活:我们的公众号计算机视觉这件小事每周推送“AI”系列资讯类文章,欢迎您的关注!

最新文章

  1. [个人翻译]Redis 集群教程(上)
  2. Makefile编译
  3. php如何去掉二维数组中重复的元素?
  4. SQL DatePart函数使用
  5. c# Dictionary的遍历和排序(转)
  6. sentence patterns
  7. 把DataTable中的数据拼接成XML时遇到的问题
  8. SharePoint 新特性及安装需知
  9. 利用onekeyup即可实现验证码的点击刷新功能
  10. [ThinkPHP] 输出、模型的使用
  11. 在WebForm中实现购物车思路
  12. 【mongodb系统学习之六】mongodb配置文件方式启动
  13. 【Unity Shaders】Shader中的光照
  14. 在Visual Studio中使用Debug Visualizers在C++中实现对原始类的自定义调试信息显示
  15. (golang)HTTP基本认证机制及使用gocolly登录爬取
  16. PAT A1109 Group Photo (25 分)——排序
  17. random os 序列化 模块模块 随机选择
  18. MySQL数据库order by 奇慢无比
  19. Elasticsearch 5.X 使用 Docker 运行使用 Head 插件
  20. (笔记)CanOpen协议【CanFestival】移植方法 支持VC、QT、STM32

热门文章

  1. PL/SQL无法显示字段可以为NULL还是不能为NULL
  2. [LeetCode] 505. The Maze II 迷宫 II
  3. 密码工具:KeePassXC
  4. 面试之leetcode分治-求众数,x幂等
  5. Module &#39;mysql&#39; already loaded in Unknown on line 0解决方法
  6. 细数那些Java程序员最容易犯那些错
  7. url与uri区别
  8. php常用的验证
  9. 函数的学习1——定义函数&amp;传递实参——参考Python编程从入门到实践
  10. python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)