在问 · 算法题解

263. 丑数

题目描述

如果一个正整数分解质因数后,只含 2、3、5 这几种质因数,就称它为丑数。1 没有质因数,也算丑数。0 和负数都不是丑数。

输入一个整数 n。n 是丑数时返回 true,否则返回 false。

示例 1
输入:n = 6
输出:true

解释:6 = 2 × 3。

示例 2
输入:n = 1
输出:true

解释:1 没有任何质因数。

示例 3
输入:n = 14
输出:false

解释:14 = 2 × 7,多了质因数 7。

数据范围

  • -2^31 <= n <= 2^31 - 1

解题思路

非正数直接不是丑数。对正数,把因子 2、3、5 依次除干净:只要能整除就一直除。如果最后剩下 1,说明没有别的质因数;否则剩下的部分就含有其他质因数。

为什么正确

原 n = 2^a · 3^b · 5^c · 当前 n,当前 n 中没有已处理过的质因数。

复杂度分析

时间 O(log n),空间 O(1)。

易错点

n <= 0 必须先判掉:0 能被任何数整除,不处理会死循环;负数也不是丑数。另外 1 是丑数。

参考代码

Python、Java、C++、Go、JavaScript、TypeScript 六种语言,逻辑一致。

class Solution:
    def isUgly(self, n: int) -> bool:
        if n <= 0:
            return False
        for p in (2, 3, 5):
            while n % p == 0:
                n //= p
        return n == 1

载入编辑器,自己跑一遍 →

数学 专题的其他题目

查看 数学 全部题目 →