# [263. 丑数](https://leetcode.cn/problems/ugly-number) [English Version](/solution/0200-0299/0263.Ugly%20Number/README_EN.md) ## 题目描述 <!-- 这里写题目描述 --> <p><strong>丑数 </strong>就是只包含质因数 <code>2</code>、<code>3</code> 和 <code>5</code> 的正整数。</p> <p>给你一个整数 <code>n</code> ,请你判断 <code>n</code> 是否为 <strong>丑数</strong> 。如果是,返回 <code>true</code> ;否则,返回 <code>false</code> 。</p> <p> </p> <p><strong>示例 1:</strong></p> <pre> <strong>输入:</strong>n = 6 <strong>输出:</strong>true <strong>解释:</strong>6 = 2 × 3</pre> <p><strong>示例 2:</strong></p> <pre> <strong>输入:</strong>n = 1 <strong>输出:</strong>true <strong>解释:</strong>1 没有质因数,因此它的全部质因数是 {2, 3, 5} 的空集。习惯上将其视作第一个丑数。</pre> <p><strong>示例 3:</strong></p> <pre> <strong>输入:</strong>n = 14 <strong>输出:</strong>false <strong>解释:</strong>14 不是丑数,因为它包含了另外一个质因数 <code>7 </code>。 </pre> <p> </p> <p><strong>提示:</strong></p> <ul> <li><code>-2<sup>31</sup> <= n <= 2<sup>31</sup> - 1</code></li> </ul> ## 解法 <!-- 这里可写通用的实现逻辑 --> - 若 `n < 1`,说明 n 一定不是丑数,返回 false。 - 若 `n % 2 == 0`,说明 2 是 n 的因子,此时应 `n /= 2`,然后继续判断 n 除以 2 后的值的因子。 - 若 `n % 3 == 0`,说明 3 是 n 的因子,此时应 `n /= 3`,然后继续判断 n 除以 3 后的值的因子。 - 若 `n % 5 == 0`,说明 5 是 n 的因子,此时应 `n /= 5`,然后继续判断 n 除以 5 后的值的因子。 - 最后,判断 n 是否等于 1,若是,说明 n 的因子只可能包含 2、3、5,返回 true;否则返回 false。 <!-- tabs:start --> ### **Python3** <!-- 这里可写当前语言的特殊实现逻辑 --> ```python class Solution: def isUgly(self, n: int) -> bool: if n < 1: return False for x in [2, 3, 5]: while n % x == 0: n //= x return n == 1 ``` ### **Java** <!-- 这里可写当前语言的特殊实现逻辑 --> ```java class Solution { public boolean isUgly(int n) { if (n < 1) return false; while (n % 2 == 0) { n /= 2; } while (n % 3 == 0) { n /= 3; } while (n % 5 == 0) { n /= 5; } return n == 1; } } ``` ### **C++** ```cpp class Solution { public: bool isUgly(int n) { if (n < 1) return false; while (n % 2 == 0) { n /= 2; } while (n % 3 == 0) { n /= 3; } while (n % 5 == 0) { n /= 5; } return n == 1; } }; ``` ### **JavaScript** ```js /** * @param {number} n * @return {boolean} */ var isUgly = function (n) { if (n < 1) return false; while (n % 2 === 0) { n /= 2; } while (n % 3 === 0) { n /= 3; } while (n % 5 === 0) { n /= 5; } return n === 1; }; ``` ### **Go** ```go func isUgly(n int) bool { if n < 1 { return false } for _, x := range []int{2, 3, 5} { for n%x == 0 { n /= x } } return n == 1 } ``` ### **PHP** ```php class Solution { /** * @param Integer $n * @return Boolean */ function isUgly($n) { while ($n) { if ($n % 2 == 0) { $n = $n / 2; } elseif ($n % 3 == 0) { $n = $n / 3; } elseif ($n % 5 == 0) { $n = $n / 5; } else { break; } } return $n == 1; } } ``` ### **...** ``` ``` <!-- tabs:end -->