力扣第24刷-丑数

简介: 力扣第24刷-丑数

Example 24

丑数

题目概述:丑数就是只包含质因数2、3 和 5的正整数。

给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。

示例 1:

输入:n = 6

输出:true

解释:6 = 2 × 3

示例 2:

输入:n = 1

输出:true

解释:1 没有质因数,因此它的全部质因数是 {2, 3, 5} 的空集。习惯上将其视作第一个丑数。

示例 3:

输入:n = 14

输出:false

解释:14 不是丑数,因为它包含了另外一个质因数7 。

解题思路:根据丑数的定义,00 和负整数一定不是丑数。

当n>0 时,若n 是丑数,则n 可以写成n = 2a * 3b * 5c的形式,其中a,b,c 都是非负整数。特别地,当a,b,c 都是0 时,n=1。

为判断n 是否满足上述形式,可以对n 反复除以2,3,5,直到n 不再包含质因数2,3,5。若剩下的数等于1,则说明n 不包含其他质因数,是丑数;否则,说明n 包含其他质因数,不是丑数。

解题步骤:

1. 首先判断n是否小于等于0,若是,则直接返回false,否则继续向下执行。

2. 定义数组factors存储质因数2、3、5,用做后续反复除法中的除数。

3. 定义for循环,依次从数组中取出各个质因数,并用n反复除以该质因数,直至无法整除,再取出下一个质因数,重复该过程。

4. for循环结束后,即质因数被反复做除法后,此时n已经不包含质因数2、3、5,若此时n等于1,则说明除2、3、5外,原n不含其他质因数(不包含1),n是丑数,返回true,否则说明除以上三个数之外,还有其他质因数(不包含1),n不是丑数,返回false。

 

示例代码如下:

public class UglyNumber {
    /**
     * 丑数就是只包含质因数2、3 和 5的正整数。
     * 给你一个整数 n ,请你判断 n 是否为 丑数 。如果是,返回 true ;否则,返回 false 。
     * 示例 1:
     * 输入:n = 6
     * 输出:true
     * 解释:6 = 2 × 3
     * 示例 2:
     * 输入:n = 1
     * 输出:true
     * 解释:1 没有质因数,因此它的全部质因数是 {2, 3, 5} 的空集。习惯上将其视作第一个丑数。
     * 示例 3:
     * 输入:n = 14
     * 输出:false
     * 解释:14 不是丑数,因为它包含了另外一个质因数7 。
     * 来源:力扣(LeetCode)
     * 链接:https://leetcode.cn/problems/ugly-number
     */
    public static void main(String[] args) {
        UglyNumber un = new UglyNumber();
        System.out.println(un.isUgly(6)); // true
    }
    /**
     * 官方
     *
     * @param n
     * @return
     */
    public boolean isUgly(int n) {
        if (n <= 0) {
            return false;
        }
        int[] factors = {2, 3, 5};
        for (int factor : factors) {
            while (n % factor == 0) {
                n /= factor;
            }
        }
        return n == 1;
    }
    /**
     * 个人
     * @param n
     * @return
     */
    /*public boolean isUgly(int n) {
        if (n <= 0) return false;
        while (n % 2 == 0) {
            n = n / 2;
        }
        while (n % 3 == 0) {
            n = n / 3;
        }
        while (n % 5 == 0) {
            n = n / 5;
        }
        return n == 1;
    }*/
}
相关文章
【Leetcode -263.丑数 -268.丢失的数字】
【Leetcode -263.丑数 -268.丢失的数字】
32 0
leetcode每日一题 2021/4/10 263. 丑数
leetcode每日一题 2021/4/10 263. 丑数
48 0
LeetCode剑指 Offer 49. 丑数(dp/打表)
LeetCode剑指 Offer 49. 丑数(dp/打表)
力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字
力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字
111 0
力扣刷题记录——258. 各位相加、263.丑数、268.丢失的数字
【力扣】 丑数 来,和我上一节数学课吧~
【力扣】 丑数 来,和我上一节数学课吧~
105 0
【力扣】 丑数 来,和我上一节数学课吧~
【Day 01】力扣(LeetCode)每日一刷[506.相对名次][264.丑数][23.合并N个升序链表]
每日一刷[506.相对名次][264.丑数][23.合并N个升序链表]。
109 0
【Day 01】力扣(LeetCode)每日一刷[506.相对名次][264.丑数][23.合并N个升序链表]
【LeetCode剑指offer49】丑数(小顶堆或DP)
方法一:小顶堆 求前k大经常用到优先级队列,小顶堆,循环将符合要求的丑数加入小顶堆,取k次堆顶元素即可让堆顶为第k个丑数。而逐个加入丑数即加入2 x 2x2x、3 x 3x3x、5 x 5x5x进入集合(去重)即可。注意这里加入小顶堆的元素不能是int类型,否则会报错overflow(因为next = temp * factor后可能会越界):
136 1
【LeetCode剑指offer49】丑数(小顶堆或DP)
|
算法 前端开发 程序员
「LeetCode」剑指Offer-49丑数
「LeetCode」剑指Offer-49丑数
112 0
「LeetCode」剑指Offer-49丑数
|
机器学习/深度学习 存储
【刷穿 LeetCode】求「第 n 个超级丑数」的两种方式 :「优先队列」&「多路归并」
【刷穿 LeetCode】求「第 n 个超级丑数」的两种方式 :「优先队列」&「多路归并」