剑指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工程师面试的必会知识

全部评论

相关推荐

03-03 23:12
已编辑
北京邮电大学 Java
书海为家:我来给一点点小建议,因为毕竟还在学校不像工作几年的老鸟有丰富的项目经验,面试官在面试在校生的时候更关注咱们同学的做事逻辑和思路,所以最好在简历中描述下自己做过项目的完整过程,比如需求怎么来的,你对需求的解读,你想到的解决办法,遇到困难如何找人求助,最终项目做成了什么程度,你从中收获了哪些技能,你有什么感悟。
你的简历改到第几版了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务