Easy草稿★★★★★O(log n) 時間 · O(1) 空間
Math
Patterns🧮 數學・組合
尚未複習過

解法已隱藏 — 先讀題目敘述、自己想想看,再點上方按鈕揭曉。

263Ugly NumberMath & GeometryEasyMath & Geometry

判斷一個整數 n 是否為醜數。醜數是指質因數只包含 2、3、5 的正整數。1 通常被視為醜數。

Example:

Input: n = 6 Output: true (6 = 2 x 3)

Intuition

TIP

核心思路:不斷除以 2、3、5,如果最終結果為 1 則是醜數。

Approaches

⭐ 1. Repeatedly Divide by Prime Factors — O(log n) / O(1)
  • Idea: 依序除以 2、3、5 直到無法整除,最終檢查是否為 1
  • Time: O(log n) - 每次至少除以 2
  • Space: 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. Recursive — O(log n) / O(log n)
  • Idea: 用遞迴表達除法過程
  • Time: O(log n)
  • Space: 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