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

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

168Excel Sheet Column TitleMath & GeometryEasyMath & Geometry

給定一個正整數 columnNumber,回傳它在 Excel 表中對應的欄位標題。例如 1 -> “A”、28 -> “AB”、701 -> “ZY”。

Example:

Input: columnNumber = 28 Output: “AB”

Intuition

TIP

核心思路:本質上是 26 進位轉換,但因為沒有 0(A=1 而非 A=0),每次需要先減 1 再取餘數。

Approaches

1. Iterative Base-26 Conversion — O(log26 n) / O(log26 n)
  • Idea: 每次先減 1 再取 % 26 得到當前位的字母,然後除以 26 處理下一位
  • Time: O(log26 n) - 每次除以 26
  • Space: O(log26 n) - StringBuilder 儲存結果
class Solution {
    fun convertToTitle(columnNumber: Int): String {
        val sb = StringBuilder()
        var n = columnNumber
        while (n > 0) {
            n-- // 轉成 0-indexed
            sb.append(('A' + n % 26).toChar())
            n /= 26
        }
        return sb.reverse().toString()
    }
}
⭐ 2. Recursive — O(log26 n) / O(log26 n)
  • Idea: 與迭代相同的邏輯,用遞迴表達更簡潔
  • Time: O(log26 n)
  • Space: O(log26 n) - 遞迴堆疊
class Solution {
    fun convertToTitle(columnNumber: Int): String {
        if (columnNumber == 0) return ""
        val n = columnNumber - 1
        return convertToTitle(n / 26) + ('A' + n % 26).toChar()
    }
}

🔑 Takeaways