前言
刷题专栏到目前已经是第十六篇了,欢迎大家来关注我的刷题专栏,一起来刷题。
今天的这道题《丑数》,就跟数据结构没什么太大关系了。
主要的考察点是关于数学方面的知识,就和求一个数字是否是质数一样的思路。
只要理解丑数的数学定义就可以解出这道题了。
下面就让我们一起来看一下吧。
算法题:丑数
从本道题的描述来看,丑数是一个只包含质数2/3/5的正整数。
所以如果一个数字是有2/3/5相乘得到的一个正整数,那就是丑数。
这里要处理的一个特殊情况,那就是如果给出的数字是0或者是一个负数的话,就一定不是丑数,则即可返回false。
这里我的思路主要就是通过不断循环去除以2/3/5三个数字,直到除到无法整除后,得到一个最终值。
并且判断这个最终值是否等于1,如果等于1,则该数字是一个丑数,反之,则不是一个丑数。
下面就来看一下代码逻辑吧。
代码展示
本道题代码具体执行如下,简单又粗暴。
public class Solution { public static void main(String[] args) { Solution solution = new Solution(); System.out.println(solution.isUgly(6)); } public boolean isUgly(int n) { if (n <= 0) { return false; } int[] ints = {2, 3, 5}; for (int i : ints) { while (n % i == 0) { n /= i; } } return n == 1; } }
代码执行结果
执行结果还算可以,就是内存的占用比较多了一些。
总结
关于丑数这道题,只要是理解其的数学概念和含义就可以,有的大哥竟然将范围的丑数全部统计出来,存放在Map集合中,通过这种方式来解题也是一种新奇思路。