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
- Figure out how the column title and numbers are converted, it's can be regarded as a 26-based conversion;
- Then you will find that for each title appended it's the abcd...x;
- You don't have to create a map or array to store all the number to column title, you use
(char)('A' + mod)
; - Then the things becomes we do divide, minus until the number is 0.
- The tricky part is the Z and final end with Z(no mod) so the column number is 1 after division;
- 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(); } }