zoukankan      html  css  js  c++  java
  • 丑数

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

    第一种方法:逐个判断每个整数是不是丑数的解法,直观但不够高效。

    第二种方法:创建数组保存已经找到的丑数,用空间换时间的解法。

    另外一种解法:参考剑指offer。

    public class Ugly{
        public int getUgly(int index){
            if(index <= 0) return 0;
            int[] uglyNumbers = new int[index];
            uglyNumbers[0] = 1;
            int nextUglyIndex = 1;
            int multiply2 = 1;
            int multiply3 = 1;
            int multiply5 = 1;
            while(nextUglyIndex < index){
                int min = Min(multiply2*2,multiply3*3,multiply5*5);
                uglyNumbers[nextUglyIndex] = min;
                while(multiply2*2 <= uglyNumbers[nextUglyIndex]){
                    ++multiply2;
                }
                while(multiply3*3 <= uglyNumbers[nextUglyIndex]){
                    ++multiply3;
                }
                while(multiply5*5 <= uglyNumbers[nextUglyIndex]){
                    ++multiply5;
                }
                ++nextUglyIndex;
            }
            int ugly = uglyNumbers[nextUglyIndex-1];
            return ugly;
        }
        public int Min(int number1,int number2,int number3){
            int min = (number1<number2)?number1:number2;
            min = (min<number3)?min:number3;
            return min;
        }
        public static void main(String[] args){
            Ugly u = new Ugly();
            int result = u.getUgly(1500);
            System.out.println(result);
        }
    }
    
  • 相关阅读:
    Python之socket
    Python之创建low版的线程池
    Python之面向对象及相关
    Python之面向对象(进阶篇)
    Python之面向对象(初级篇)
    Python之线程与进程
    python中执行父类的构造方法
    python之反射
    记一次有趣的米筐经历~
    算法第四章作业
  • 原文地址:https://www.cnblogs.com/yingpu/p/9252359.html
Copyright © 2011-2022 走看看