题目:

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. django基础知识之定义模型:

    定义模型 在模型中定义属性,会生成表中的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django会为 ...

  2. C#中产生SQL语句的几种方式

    (1)拼接产生SQL语句: string sql = "insert into czyb(yhm,mm,qx) values('" + txtName.Text + "' ...

  3. springboot自动装配(1)---@SpringBootApplication注解怎么自动装配各种组件

    1.对于springboot个人认为它就是整合了各种组件,然后提供对应的自动装配和启动器(starter) 2.@SpringBootApplication注解其实就是组合注解,通过它找到自动装配的注 ...

  4. .Net Core 学习使用Session、和Cookie验证身份

    一.使用Session 1.1 Status.cs 中配置 public void ConfigureServices(IServiceCollection services) { services. ...

  5. 20131228-sql命令

    开始 --cmd net start mssqlservernetnet stop mssqlserver

  6. Linux系统-CENTOS7使用笔记

    复制文件夹下的所有文件到另一个文件夹下 cp ~/dirname/* ~/otherdirname 解压rar文件 PS:在liunx下原本是不支持rar文件的,需要安装liunx下的winrar版本 ...

  7. java ServletContextListener 实现UDP监听

    使用spring boot实现项目启动时的监听, UDPListener import java.io.IOException;import java.io.UnsupportedEncodingEx ...

  8. WMI_COM_API

    Win32_Processor // CPU 处理器 Win32_PhysicalMemory // 物理内存 Win32_Keyboard // 键盘 Win32_PointingDevice // ...

  9. C#3.0新增功能10 表达式树 03 支持表达式树的框架类型

    连载目录    [已更新最新开发文章,点击查看详细] 存在可与表达式树配合使用的 .NET Core framework 中的类的大型列表. 可以在 System.Linq.Expressions 查 ...

  10. 第一个C# Winform实例

    前面我们准备好了相关的库,现在开始搭建环境,本人自动化行业,就用Windorm开发吧,例子仅仅做引导,希望大家能深入.VS版本VS2017 1:打开VS建立一个WInform 项目.拉入两个控件,gr ...