Back to blog
Feb 02, 2026
5 min read

Excel Sheet Column Title

Convert a given column number to its corresponding Excel column title as it appears in an Excel sheet.

Difficulty: Easy | Acceptance: 46.40% | Paid: No Topics: Math, String

Given an integer columnNumber, return its corresponding column title as it appears in an Excel sheet.

For example:

A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 …

Examples

Example 1:

Input: columnNumber = 1
Output: "A"

Example 2:

Input: columnNumber = 28
Output: "AB"

Example 3:

Input: columnNumber = 701
Output: "ZY"

Constraints

1 <= columnNumber <= 2³¹ - 1

Iterative Base-26 Conversion

Intuition This is a modified base-26 conversion problem where digits are 1-26 (A-Z) instead of 0-25. We repeatedly divide by 26, adjusting for the 1-indexed system.

Steps

  • While columnNumber > 0:
    • Decrement columnNumber by 1 (to convert from 1-indexed to 0-indexed)
    • Get remainder = columnNumber % 26
    • Prepend the corresponding letter (0 -> A, 1 -> B, …, 25 -> Z)
    • Divide columnNumber by 26
python
class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        result = []
        while columnNumber &gt; 0:
            columnNumber -= 1
            remainder = columnNumber % 26
            result.append(chr(ord('A') + remainder))
            columnNumber //= 26
        return ''.join(reversed(result))

Complexity

  • Time: O(log₂₆(n)) - We divide by 26 in each iteration
  • Space: O(log₂₆(n)) - To store the result string
  • Notes: This is the most efficient approach with optimal time and space complexity.

Recursive Base-26 Conversion

Intuition Same mathematical approach as the iterative solution, but implemented using recursion for cleaner code structure.

Steps

  • Base case: if columnNumber is 0, return empty string
  • Decrement columnNumber by 1
  • Get remainder = columnNumber % 26
  • Recursively solve for columnNumber / 26 and append the current letter
python
class Solution:
    def convertToTitle(self, columnNumber: int) -> str:
        if columnNumber == 0:
            return ''
        columnNumber -= 1
        return self.convertToTitle(columnNumber // 26) + chr(ord('A') + columnNumber % 26)

Complexity

  • Time: O(log₂₆(n)) - Same as iterative approach
  • Space: O(log₂₆(n)) - Recursion stack depth plus result string
  • Notes: Cleaner code but uses recursion stack space; iterative approach is preferred for very large inputs.