Swift - LeetCode - 丑数

题目

丑数 就是只包含质因数 235 的正整数。

给你一个整数 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

方法一:数学

思路及解法

根据丑数的定义,0 和负整数一定不是丑数。

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

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

代码

class Solution {
    func isUgly(_ n: Int) -> Bool {
        var n: Int = n
        if n <= 0 {
            return false
        }
        let factors: [Int] = [2, 3, 5]
        for factor in factors {
            while n % factor == 0 {
                n /= factor
            }
        }
        return n == 1
    }
}

复杂度分析

  • 时间复杂度:O(\log n)。时间复杂度取决于对 n 除以 2,3,5 的次数,由于每次至少将 n 除以 2,因此除法运算的次数不会超过 O(\log n)

  • 空间复杂度:O(1)

方法二:数学(二)

思路及解法

判断当前 num 是否可以整除 2,如果可以将 num/2;再判断是否可以整除 3,如果可以将 num/3;判断是否可以整除 5,可以的话将 num/5
如果符合丑数只包含 235 的定义则最终的 num 值一定等于 1

代码

class Solution {
    func isUgly(_ n: Int) -> Bool {
        var n: Int = n
        while n >= 1 {
            if n % 2 == 0 {
                n /= 2
            } else if n % 3 == 0 {
                n /= 3
            } else if n % 5 == 0 {
                n /= 5
            } else {
                break
            }
        }
        return n == 1
    }
}

复杂度分析

  • 时间复杂度:O(\log n)

  • 空间复杂度:O(1)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【题目描述】编写一个程序判断给定的数是否为丑数。丑数就是只包含质因数 2, 3, 5 的正整数。 【示例1】 【示...
    1江春水阅读 636评论 0 3
  • 题目汇总https://leetcode-cn.com/tag/math/223. 矩形面积中等[✔]224. 基...
    今天柚稚了么阅读 110评论 0 0
  • [TOC] 一、题目描述 编写一个程序,找出第 n 个丑数。 丑数就是只包含质因数 2, 3, 5 的正整数。 示...
    RuriApoka阅读 336评论 0 0
  • 素因子(也称质因数/质因子):在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互...
    _Mirage阅读 4,293评论 0 0
  • 基本概念 因数 :若A=m×n,则称m,n是A的因数;A是m,n的倍数 一个数的最大因数和最小倍数都...
    AQ王浩阅读 2,281评论 0 4

友情链接更多精彩内容