Learnitweb

Problem 168: Excel Sheet Column Title

You are given a positive integer columnNumber, and you must return its corresponding Excel column title.

Excel columns work like this:

1 → A
2 → B
3 → C

26 → Z
27 → AA
28 → AB

52 → AZ
53 → BA

This is essentially a base-26 conversion, but with a twist:
There is no zero, and Excel uses 1–26 instead of 0–25.


Understanding the Problem

Excel column letters behave like an alphabetic numbering system.

Comparison to base-26:
Digits: A → 1, B → 2, …, Z → 26

But in typical base-26:
Digits: A → 0, B → 1, …, Z → 25

So Excel behaves like:
(columnNumber – 1) converted to base-26, using A=0 instead of A=1.

This means:
To find the last character:
Take (columnNumber – 1) % 26
Add ‘A’
Then reduce columnNumber = (columnNumber – 1) / 26
Repeat until columnNumber becomes 0.


Approach (Explained in Simple Language)

This is similar to converting a number to a base-26 string.

Steps:

Step 1: While columnNumber > 0

Decrease columnNumber by 1
This shifts Excel’s 1–26 range into 0–25 range.

Step 2: Find the last character

char = (columnNumber % 26) + ‘A’

Step 3: Append the character

But append at the end because we are building the string backwards.

Step 4: Divide columnNumber by 26

columnNumber /= 26

Step 5: Reverse the final string

This generates correct Excel column names.


Java Code

public class ExcelSheetColumnTitle {

    public String convertToTitle(int columnNumber) {

        StringBuilder result = new StringBuilder();

        while (columnNumber > 0) {

            columnNumber--;

            int remainder = columnNumber % 26;

            result.append((char) ('A' + remainder));

            columnNumber /= 26;
        }

        return result.reverse().toString();
    }

    public static void main(String[] args) {
        ExcelSheetColumnTitle sol = new ExcelSheetColumnTitle();
        System.out.println(sol.convertToTitle(701));  // Expected: ZY
    }
}

Dry Run

Let’s dry run for several inputs.


Example 1

Input: 1 → Output: A

columnNumber = 1
Subtract 1 → 0

remainder = 0 % 26 = 0 → ‘A’
Append → “A”
columnNumber = 0

Reverse → “A”


Example 2

Input: 28
Output should be: AB

columnNumber = 28

Iteration 1:
columnNumber– → 27
remainder = 27 % 26 = 1 → ‘B’
append ‘B’
columnNumber = 27 / 26 = 1

Iteration 2:
columnNumber– → 0
remainder = 0 % 26 = 0 → ‘A’
append ‘A’
columnNumber = 0

String so far = “BA”
Reverse → “AB”


Example 3

Input: 701
Expected: ZY

Column mapping:
701 → ZY (since 701 = 26*27 – 1)

Walk through:

columnNumber = 701

Iteration 1:
columnNumber– = 700
remainder = 700 % 26 = 24 → ‘Y’
append ‘Y’
columnNumber = 700 / 26 = 26

Iteration 2:
columnNumber– = 25
remainder = 25 % 26 = 25 → ‘Z’
append ‘Z’
columnNumber = 25 / 26 = 0

String = “YZ”
Reverse → “ZY”

Correct.


Why This Approach Works

Excel does not use zero in its system:

A (1), not (0)
Z (26)
AA (27)

To adapt standard base-26 conversion:

Shift by subtracting 1
Use remainder and division
Build string in reverse order

This maps numbers exactly to Excel column titles.