263. Ugly Number
EasyDescription
判斷一個整數
n是否為醜數。醜數是指質因數只包含 2、3、5 的正整數。1 通常被視為醜數。
Example:
Input: n = 6 Output: true (6 = 2 x 3)
Intuition#
核心思路:不斷除以 2、3、5,如果最終結果為 1 則是醜數。
- 醜數的定義是質因數只包含 2、3、5
- 反覆將 n 除以 2、3、5,直到不能再除
- 最後若 n == 1 則所有質因數都已被消除,是醜數
- 注意:n <= 0 不是醜數
Approaches#
⭐1: 反覆除以質因數#
- 概念: 依序除以 2、3、5 直到無法整除,最終檢查是否為 1
- 時間複雜度:
O(log n)- 每次至少除以 2 - 空間複雜度:
O(1)
class Solution {
fun isUgly(n: Int): Boolean {
if (n <= 0) return false
var num = n
for (factor in intArrayOf(2, 3, 5)) {
while (num % factor == 0) {
num /= factor
}
}
return num == 1
}
}2: 遞迴寫法#
- 概念: 用遞迴表達除法過程
- 時間複雜度:
O(log n) - 空間複雜度:
O(log n)- 遞迴堆疊
class Solution {
fun isUgly(n: Int): Boolean {
if (n <= 0) return false
if (n == 1) return true
return when {
n % 2 == 0 -> isUgly(n / 2)
n % 3 == 0 -> isUgly(n / 3)
n % 5 == 0 -> isUgly(n / 5)
else -> false
}
}
}🔑 Takeaways#
- Pattern: 質因數分解——反覆除以目標質因數直到無法整除
- 關鍵技巧: 用 for 迴圈遍歷質因數清單比寫三個 while 更簡潔;先排除 n <= 0 的邊界情況