zoukankan      html  css  js  c++  java
  • 判断丑数与寻找丑数

    丑数,真丑!
    一个数的因子仅仅包括2,3,5的数称为丑数。
    public class uglyNumber {
    //判断一个数是否为丑数
    public boolean isUglyNumber(int number){
    while (number%2==0){
    number = number/2;
    }
    while (number%3==0){
    number = number/3;
    }
    while (number%5==0){
    number = number/5;
    }
    return number==1;
    }
    //寻找第N个丑数
    //从前往后查找,需要使用前面的元素确定放后面的元素。
    //设置三个指针,分别指向对应索引的位置,取大于元素最小的那一个,作为下一个丑数。
    public int FindUglyNumber(int index){
    int uglyNumber[] = new int[index];
    uglyNumber[0] = 1;
    int uglyIndex = 1;
    int p2 = 0;
    int p3 = 0;
    int p5 = 0;
    while (uglyIndex<index){
    //新的最小值为,原来p2,p3,p5,对应位置乘2,3,5得到。
    //之后赋值给那个位置。
    //之后寻找下一个位置的三个指针。
    int min = min(uglyNumber[p2]*2,uglyNumber[p3]*3,uglyNumber[p5]*5);
    uglyNumber[uglyIndex] = min;
    while (uglyNumber[p2]*2<=uglyNumber[uglyIndex]){
    p2++;
    }
    while (uglyNumber[p3]*3<=uglyNumber[uglyIndex]){
    p3++;
    }
    while (uglyNumber[p5]*5<=uglyNumber[uglyIndex]){
    p5++;
    }
    uglyIndex++;
    }
    return uglyNumber[index-1];
    }
    //选择a,b,c中最小的一个
    public int min(int a,int b,int c){
    if(a<b&&a<c) {
    return a;
    }
    if(b<a&&b<c){
    return b;
    }
    return c;
    }

    }
    总结:1,首先要理解丑数的概念。
    2,查找第N个丑数时,会开辟N个空间,但是这样做能够省时间。
  • 相关阅读:
    写在最前面
    Bzoj 2281 [Sdoi2011]黑白棋 题解
    bzoj3125: CITY 题解
    CDQZ 集训大总结
    CDQZ集训DAY10 日记
    CDQZ集训DAY9 日记
    CDQZ集训DAY7 日记
    CDQZ集训DAY6 日记
    CDQZ集训DAY5 日记
    CDQZ集训DAY4 日记
  • 原文地址:https://www.cnblogs.com/liuwentao/p/9369670.html
Copyright © 2011-2022 走看看