博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode——264. Ugly Number II
阅读量:4672 次
发布时间:2019-06-09

本文共 1835 字,大约阅读时间需要 6 分钟。

题目:

Write a program to find the n-th ugly number.

Ugly numbers are positive numbers whose prime factors only include 2, 3, 5. For example, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 is the sequence of the first 10 ugly numbers.

Note that 1 is typically treated as an ugly number, and n does not exceed 1690.

大意:

情给出第n个丑数,丑数是因数只有2,3,5的数,从小到大排列,1,2,3,4,5,6,8,9,10,12是前10个丑陋数字的序列。其中1被定义为丑数。

 

分析:

丑数的因数只能是2,3,5,所以我这样可以得到

1、丑数是丑数*丑数得到的,一开始的丑数是1、2、3、5。

2、每个丑数刚好可以获得三个丑数,分别乘以2、3、5得到。

3、由于丑数都是整数所以,第n个丑数*2<第n个丑数*3<第n个丑数*5

然后我为了分析起来方便定义了一个名词,通过某个丑数*2、*3、*5获得另一个丑数,这样的过程中某个丑数被我称为底丑数。

4、所以第3条可以增加为相同的底丑数*2获得的丑数最小,不同的不一定。

根据这4个规律我们可以这样,

建立一个数组存储丑数,第一个丑数为1,索引为0。

然后设定3个变量记录底丑数在数组中的索引,所以a=0(*2)、b=0(*3)、c=0(*5)指定1为底丑数。

对比1*2,1*3,1*5可得第二关丑数是2,因为这是是*2获得的,那么将a++,因为这个丑数已经获得过了。这是底丑数分别为2,1,1。

对比2*2,1*3,1*5可得第三个丑数是3,因为这是是*3获得的,那么将b++,因为这个丑数已经获得过了。这是底丑数分别为2,2,1。

对比2*2,2*3,1*5可得第三个丑数是4,因为这是是*2获得的,那么将a++,因为这个丑数已经获得过了。这是底丑数分别为3,2,1。

对比3*2,2*3,1*5可得第三个丑数是5,因为这是是*5获得的,那么将c++,因为这个丑数已经获得过了。这是底丑数分别为3,2,2。

对比3*2,2*3,2*5可得第三个丑数是6,因为这是是*2和*3都可获得的,那么将a++,b++,因为这两个相等的丑数已经获得过了。这是底丑数分别为4,3,2。

对比4*2,3*3,2*5可得第三个丑数是8,因为这是是*2获得的,那么将a++,因为这个丑数已经获得过了。这是底丑数分别为5,2,2。

。。。。。。

总结为代码就是:

public static int nthUglyNumber(int n) {        if(n <= 0){            return 0;        }        List
result = new ArrayList
(); result.add(1); int a = 0, b = 0, c = 0; while (result.size() < n){ int next = min(result.get(a) * 2,min(result.get(b)*3, result.get(c)*5)); result.add(next); if(result.get(a) * 2 == next) a++; if(result.get(b) * 3 == next) b++; if(result.get(c) * 5 == next) c++; } return result.get(n - 1); } static int min(int n,int m) { if(n >= m){ n =m; } return n; }

 

转载于:https://www.cnblogs.com/xxbbtt/p/8303929.html

你可能感兴趣的文章
Mysql中文乱码问题解决
查看>>
make clean指令出现问题
查看>>
巴中故里
查看>>
Docker(一):Docker入门
查看>>
异常检测(Anomaly detection): 异常检测算法(应用高斯分布)
查看>>
6、easyUI-拖放事件及应用
查看>>
Shell脚本学习-数组
查看>>
2015年传智播客JavaEE 第168期就业班视频教程day38-SSH综合案例-1
查看>>
day18-事务与连接池 1.复习
查看>>
[原]从一个链接错误探究GCC的链接库顺序
查看>>
PHP面向对象:instanceof 运算符 (备忘)
查看>>
数据存储-CoreData总结
查看>>
通过Ajax的方式执行GP服务
查看>>
Ztree加载完成后显示勾选节点
查看>>
HDU 3401
查看>>
asp.net中XmlDocument解析出现出错,处理特殊字符
查看>>
unable to locate package gparted
查看>>
Centos7安装Mysql
查看>>
Hadoop伪分布安装配置
查看>>
idhttp.post方式 调用datasnap rest 远程方法(转咏南兄)
查看>>