美文网首页
面试题49(剑指offer)--丑数

面试题49(剑指offer)--丑数

作者: Tiramisu_b630 | 来源:发表于2019-08-19 22:24 被阅读0次

    题目:

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

    思路:

    • 丑数由另外一个丑数乘以2,3或者5得到,因此我们可以创建一个数组,里面的数字是有序的丑数。
    • 下一个丑数的值应该为min(ugly[pNum2]*2,ugly[pNum3]*3,ugly[pNum5]*5)前面的数中分别乘以2,3或5之后大于当前最大值的最小的数。

    代码:

        private static int uglyNumber(int index){
            if (index<=0){
                return 0;
            }
            int[] ugly=new int[index];
            ugly[0]=1;
            int pNum2=0,pNum3=0,pNum5=0;
            for (int i = 1; i <index ; i++) {
                int minVal=min(ugly[pNum2]*2,ugly[pNum3]*3,ugly[pNum5]*5);
                ugly[i]=minVal;
                if (minVal==ugly[pNum2]*2){
                    pNum2++;
                }
                if (minVal==ugly[pNum3]*3){
                    pNum3++;
                }
                if (minVal==ugly[pNum5]*5){
                    pNum5++;
                }
            }
            return ugly[index-1];
        }
        private static int min(int a,int b,int c){
            int min=Math.min(a,b);
            int res=Math.min(min,c);
            return res;
        }
    

    相关文章

      网友评论

          本文标题:面试题49(剑指offer)--丑数

          本文链接:https://www.haomeiwen.com/subject/zodysctx.html