10k

168. Excel Sheet Column Title

Question

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 
...

Example 1:

Input: columnNumber = 1
Output: "A"

Example 2:

Input: columnNumber = 28
Output: "AB"

Example 3:

Input: columnNumber = 701
Output: "ZY"

Constraints:

  • 1 <= columnNumber <= 231 - 1

Approach

  1. Figure out how the column title and numbers are converted, it's can be regarded as a 26-based conversion;
  2. Then you will find that for each title appended it's the abcd...x;
  3. You don't have to create a map or array to store all the number to column title, you use (char)('A' + mod);
  4. Then the things becomes we do divide, minus until the number is 0.
    1. The tricky part is the Z and final end with Z(no mod) so the column number is 1 after division;
    2. I tried in this direction with base 27, good point but can not be implemented , we cannot change the base of the whole thing, but we can slightly change the number we used to calculate each time(columnNumber--)

Code

class Solution {
    public String convertToTitle(int columnNumber) {
        
        // num = 26^n * a + 26^n-1 * b... 26^0 * x;
        StringBuilder sb = new StringBuilder();
        while (columnNumber > 0) {
            columnNumber--;
            int mod = columnNumber % 26;
            sb.insert(0, (char)('A' + mod));
            columnNumber = columnNumber / 26;
        }
        
        return sb.toString();
    }
}
Thoughts? Leave a comment