刷题专栏(十六):丑数

83 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第16天,点击查看活动详情

前言

刷题专栏到目前已经是第十六篇了,欢迎大家来关注我的刷题专栏,一起来刷题。

今天的这道题《丑数》,就跟数据结构没什么太大关系了。

主要的考察点是关于数学方面的知识,就和求一个数字是否是质数一样的思路。

只要理解丑数的数学定义就可以解出这道题了。

下面就让我们一起来看一下吧。

image.png

算法题:丑数

从本道题的描述来看,丑数是一个只包含质数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;
    }

}

代码执行结果

执行结果还算可以,就是内存的占用比较多了一些。

image.png

总结

关于丑数这道题,只要是理解其的数学概念和含义就可以,有的大哥竟然将范围的丑数全部统计出来,存放在Map集合中,通过这种方式来解题也是一种新奇思路。