剑指offer题解

1-10题

11-20题

21-30题

31-40题

49.丑数

Medium
LeetCode

题:我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。求按从小到大的顺序的第 n 个丑数。

思路:
1.暴力解法:遍历所有自然数,每遍历到一个数就判断这个数是不是丑数,求出第n个丑数
2.利用丑数的性质,丑数只包含质因子 2、3 和 5,由此得知想要求得一个丑数可以通过一个丑数×2或者×3或者×5的方法求出来,那么这题就变成通过之前的丑数求之后的丑数的题了
设置三个指针,分别求指针指向的数(丑数)的2倍 3倍 5倍,三者比较得出最小的就是下一个丑数

public int nthUglyNumber(int n) {
        if(n < 0) return 0;
        int[] uglyArr = new int[n];
        uglyArr[0] = 1;
        int p2 = 0,p3 = 0,p5 = 0;
        for(int i=1;i<n;i++){
            int lastMaxUgly = uglyArr[i-1];
            while(lastMaxUgly >= uglyArr[p2]*2) p2++;
            while(lastMaxUgly >= uglyArr[p3]*3) p3++;
            while(lastMaxUgly >= uglyArr[p5]*5) p5++;
            uglyArr[i] = Math.min(Math.min(uglyArr[p2]*2,uglyArr[p3]*3),uglyArr[p5]*5);
        }
        return uglyArr[n-1];
    }

41-50题

Java开发工程师面试必知必会 文章被收录于专栏

这里包含Java工程师面试的必会知识

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务