zoukankan      html  css  js  c++  java
  • LeetCode——264. Ugly Number II

    题目:

    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;
        }
  • 相关阅读:
    docker安装
    快速删除docker中的容器
    CentOS赋予一个普通用户root权限
    大型电商网站:第三章:环境搭建
    面试:第十一章:缓存
    面试:第十章:单点登录
    面试:第九章:分布式 、高并发、集群、负载均衡、高可用
    面试:第八章:SpringMVC、Springboot、Mybatis、Dubbo、Zookeeper、Redis、Elasticsearch、Nginx 、Fastdfs、ActiveMQ
    面试:第七章:冷门面试题
    大型电商网站:第一章:主要电商模式
  • 原文地址:https://www.cnblogs.com/xxbbtt/p/8303929.html
Copyright © 2011-2022 走看看