题解《算法零基础100讲》(第7讲---丑数) (java版)
Posted 敲代码的xiaolang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解《算法零基础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;
}
}/* 遍历所有数字,检查是不是回文串。
如果是,检查是不是素数。如果当前数字长度为 8,可以跳过检查,因为不存在 8 长度的素数。(我其实也不知道为啥不存在8长度的素数。。。)
*/
第二题:
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得到的比上一个丑数大的数中最小的。
我们来看一个图:
/*仿照此位大佬思路: https://blog.csdn.net/qq_17593855/article/details/121012178*/
class Solution {
public int nthUglyNumber(int n) {
if(n < 2){
return n; /* 返回 1 */
}
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]; /* 注意下标 */
}
}
有问题欢迎留言,欢迎加入“万人千题”社区,在这里一起努力。
以上是关于题解《算法零基础100讲》(第7讲---丑数) (java版)的主要内容,如果未能解决你的问题,请参考以下文章
题解《算法零基础100讲》(第16讲) 变量交换算法(java版)
题解《算法零基础100讲》(第8讲) 素数筛选(java版)
题解《算法零基础100讲》(第17讲) 线性枚举 - 最值算法(java版)
题解《算法零基础100讲》(第9讲) 算术基本定理(java版)