栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【题解】《算法零基础100讲》(第7讲---丑数) (java版)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【题解】《算法零基础100讲》(第7讲---丑数) (java版)

算法小白欢迎加入此社区:https://bbs.csdn.net/forums/hero?category=0
由英雄大佬带领的抱团学算法队伍,从0开始,期待你的加入。拾

本博文是对此文章习题所作的题解,如有不足,请多指教:
https://blog.csdn.net/WhereIsHeroFrom/article/details/120875207

今天的题很nice,因为两道都没搞出来,最后还是整整丑数吧。。。

在这里力推此为大佬的题解,分析的很是详细,笔者的代码也是参考此位大佬的思路和官方题解:https://blog.csdn.net/qq_17593855/article/details/121012178

第一题:
https://leetcode-cn.com/problems/prime-palindrome/

结果:嵐竟是我自己

class Solution {
    public int primePalindrome(int N) {
        while (true) {
            if (N == reverse(N) && isPrime(N))
                return N;
            N++;
            if (10_000_000 < N && N < 100_000_000)
                N = 100_000_000;
        }
    }

    public boolean isPrime(int N) { 
        if (N < 2) return false;
        int R = (int) Math.sqrt(N);
        for (int d = 2; d <= R; ++d)
            if (N % d == 0) return false;
        return true;
    }

    public int reverse(int N) { 
        int ans = 0;
        while (N > 0) {
            ans = 10 * ans + (N % 10);
            N /= 10;
        }
        return ans;
    }
}

第二题:
https://leetcode-cn.com/problems/chou-shu-lcof/

其实刚开始看到题,思路是他既然说了只包括质因子2、3、5,那么我就从头开始遍历,如果这个数是对2取余为0,他不一定为丑数,比如他可以是70。他如果是丑数,那么只能由2乘以2、2乘以3、2乘以5、3乘以5、2乘以3乘以5…得到,所以需要考虑的判断条件就超级多。
在力扣参考了一些大佬的题解后,参差不齐,总是有一点小小的懵。不过这位大佬讲解的比较清楚:https://blog.csdn.net/qq_17593855/article/details/121012178
他文中有这样一句话:因为每个丑数都是通过一些2一些3一些5生成的,那么,如果我想要生成下一个丑数肯定是是在之前的所有丑数分别乘2乘3乘5得到的比上一个丑数大的数中最小的

我们来看一个图:

 

class Solution {
    public int nthUglyNumber(int n) {
        if(n < 2){
            return n;  
        }
        int a = 0, b = 0, c = 0;
        int[] Array = new int[n];
        Array[0] = 1;
        int i;
        for(i = 1; i < n; i++){
            int n1 = Array[a] * 2;
            int n2 = Array[b] * 3;
            int n3 = Array[c] * 5;
            int temp = Math.min(Math.min(n1,n2),n3);   
            Array[i] = temp;
           
           if(n1 <= temp)
                a++;
            if(n2 <= temp)
                b++;
            if(n3 <= temp)
                c++;
        }
        return Array[n - 1];  
    }
}

有问题欢迎留言,欢迎加入“万人千题”社区,在这里一起努力。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/353257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号