丑数

http://blog.csdn.net/baoendemao/article/details/39899367

 

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

 

丑数应该是另一个丑数乘以2、3或者5的结果(1除外)。因此我们可以创建一个数组,里面的数字是排好序的丑数。里面的每一个丑数是前面的丑数乘以2、3或者5得到的

三个指针分别记录与2、3、5相乘的丑数的位置

 

public static int getUgly(int k){
        int[] arr = new int[k];  //记录前k个丑数
        arr[0]=1;
        int p = 1;  //arr的指针
        int p2 = 0;  //2与第几个丑数相乘
        int p3 = 0;
        int p5 = 0;
        
        while(p<k){           //不断往arr中填充数据,直到填满k个
            int current2 = 2*arr[p2];
            int current3 = 3*arr[p3];
            int current5 = 5*arr[p5];
            int current = getmin(current2,current3,current5);
            if(current==current2){     //移动指针
                p2++;
            }
            if(current==current3){
                p3++;
            }
            if(current==current5){
                p5++;
            }
            arr[p++] = current; //填充数据,并移动指针
        }
        
        return arr[k-1];
        
    }
    
    public static int getmin(int a,int b,int c){
        int min=a;
        if(min>b){
            min = b;
        }
        if(min>c){
            min = c;
        }
        return min;
    }

 

posted on 2017-08-26 16:41  zhangxiaoyu  阅读(195)  评论(0)    收藏  举报

导航