题目:

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<Integer> result = new ArrayList<Integer>();
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;
}

LeetCode——264. Ugly Number II的更多相关文章

  1. [leetcode] 264. Ugly Number II (medium)

    263. Ugly Number的子母题 题目要求输出从1开始数,第n个ugly number是什么并且输出. 一开始想着1遍历到n直接判断,超时了. class Solution { public: ...

  2. [LeetCode] 264. Ugly Number II 丑陋数 II

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...

  3. [LeetCode] 264. Ugly Number II 丑陋数之二

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...

  4. Leetcode 264. Ugly Number II

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...

  5. (medium)LeetCode 264.Ugly Number II

    Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose prime factors ...

  6. leetcode 263. Ugly Number 、264. Ugly Number II 、313. Super Ugly Number 、204. Count Primes

    263. Ugly Number 注意:1.小于等于0都不属于丑数 2.while循环的判断不是num >= 0, 而是能被2 .3.5整除,即能被整除才去除这些数 class Solution ...

  7. 【LeetCode】264. Ugly Number II

    Ugly Number II Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose ...

  8. 【刷题-LeetCode】264. Ugly Number II

    Ugly Number II Write a program to find the n-th ugly number. Ugly numbers are positive numbers whose ...

  9. 【LeetCode】264. Ugly Number II 解题报告(Java & Python)

    标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ https://leetcode.com/prob ...

随机推荐

  1. CAD2014学习笔记-文字编辑与尺寸标注

    基于 虎课网huke88.com CAD教程 文字与表格 输入文字:TEXT.MTEXT 插入表格:table 新建表格样式 尺寸标注 测量工具:Di.DLI 开启标注:打开工具-工具栏-标注 对齐/ ...

  2. 基于Vue的通用框架Nuxt.js

    问题:最近有些朋友问我写官网,用Vue框架实现好不好? 相信很多使用Vue的小伙伴们一样疑惑这个问题,其实从这个问题就可以知道你对Vue这个框架是否真的熟悉了.其实单单使用Vue这个框架来做官网的,其 ...

  3. 【学习笔记】动态规划—斜率优化DP(超详细)

    [学习笔记]动态规划-斜率优化DP(超详细) [前言] 第一次写这么长的文章. 写完后感觉对斜优的理解又加深了一些. 斜优通常与决策单调性同时出现.可以说决策单调性是斜率优化的前提. 斜率优化 \(D ...

  4. Java编程思想:擦除的神秘之处

    import java.lang.reflect.Array; import java.util.ArrayList; import java.util.List; public class Test ...

  5. I/O:OutputStream

    OutputStream: void close() :关闭此输出流并释放与此流有关的所有系统资源. void flush() :刷新此输出流并强制写出所有缓冲的输出字节. void write(by ...

  6. Linux 系统的基本操作及工具的使用

    基本操作命令如:useradd.userdel.passwd.su 添加用户.删除用户.修改密码.切换用户 ls.ll.cd.cp.mv.chmod ps.kil.man mkdir.touch.ta ...

  7. SpringCloud解析之Zuul(二)

    本文基于Spring Cloud Edgware.SR6,Zuul版本1.3.1,解析Zuul的请求拦截机制,让大家对Zuul的原理有个大概的认识和了解.如有不对的地方,欢迎指正. 在上一期的Spri ...

  8. Git的使用和配置小白必看都是干货,为您解惑

    Git安装 首先下载git这个软件,然后打开码云新建仓库 在本地选择一个路径作为本地仓库 点新建仓库然后输入邮箱和密码,然后进行配置 在要作为本地仓库的地方新建一个文件夹,保存后关闭,在文件夹空白处鼠 ...

  9. ehcache的使用 Shiro与Ehcache的结合(附:EhcacheUtils)

    ehcache 缓存的使用 合理的使用缓存会极大的提高程序的运行效率.切记:缓存请勿滥用. 配置ehcache与Shiro shiro初识请查看该文章 https://blog.csdn.net/py ...

  10. 使用canvas来完成线性渐变和径向渐变的功能

    fillStyle的第二种使用情况就是渐变色的填充.渐变色就分为线性渐变色和径向渐变色.   线性渐变:大致分为两步 这里又会使用到canvas的两个新的函数.   第一步 : 使用一个新的函数cre ...