LeetCode 168: Excel Sheet Column Title (Base-26 Without Zero Digit)
LeetCode 168MathStringToday we solve LeetCode 168 - Excel Sheet Column Title.
Source: https://leetcode.com/problems/excel-sheet-column-title/
English
Problem Summary
Given a positive integer columnNumber, convert it to its corresponding Excel column title (1 -> A, 26 -> Z, 27 -> AA, ...).
Key Insight
This is a 1-indexed base-26 system (digits are A..Z, no zero digit). So each step should first do columnNumber--, then take columnNumber % 26 to map into A..Z.
Algorithm
1) Initialize an empty builder/string.
2) While columnNumber > 0: decrement by 1, append mapped char ('A' + columnNumber % 26), divide by 26.
3) Reverse and return.
Complexity
Time: O(log_26 n).
Space: O(log_26 n).
Reference Implementations (Java / Go / C++ / Python / JavaScript)
class Solution {
public String convertToTitle(int columnNumber) {
StringBuilder sb = new StringBuilder();
while (columnNumber > 0) {
columnNumber--;
sb.append((char) ('A' + (columnNumber % 26)));
columnNumber /= 26;
}
return sb.reverse().toString();
}
}func convertToTitle(columnNumber int) string {
b := make([]byte, 0)
for columnNumber > 0 {
columnNumber--
b = append(b, byte('A'+columnNumber%26))
columnNumber /= 26
}
for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
b[i], b[j] = b[j], b[i]
}
return string(b)
}class Solution {
public:
string convertToTitle(int columnNumber) {
string s;
while (columnNumber > 0) {
columnNumber--;
s.push_back(char('A' + (columnNumber % 26)));
columnNumber /= 26;
}
reverse(s.begin(), s.end());
return s;
}
};class Solution:
def convertToTitle(self, columnNumber: int) -> str:
chars = []
while columnNumber > 0:
columnNumber -= 1
chars.append(chr(ord('A') + columnNumber % 26))
columnNumber //= 26
return ''.join(reversed(chars))/**
* @param {number} columnNumber
* @return {string}
*/
var convertToTitle = function(columnNumber) {
const chars = [];
while (columnNumber > 0) {
columnNumber--;
chars.push(String.fromCharCode('A'.charCodeAt(0) + (columnNumber % 26)));
columnNumber = Math.floor(columnNumber / 26);
}
chars.reverse();
return chars.join('');
};中文
题目概述
给定正整数 columnNumber,将其转换为 Excel 列名(如 1 -> A,26 -> Z,27 -> AA)。
核心思路
这是一个“无 0 位”的 26 进制(字母 A..Z 对应 1..26)。因此循环中要先 columnNumber--,再取模映射字符,最后整除 26 进入下一位。
算法步骤
1)初始化空字符串构造器。
2)当 columnNumber > 0 时:先减一,追加字符 'A' + columnNumber % 26,再 columnNumber /= 26。
3)结果反转后返回。
复杂度分析
时间复杂度:O(log_26 n)。
空间复杂度:O(log_26 n)。
多语言参考实现(Java / Go / C++ / Python / JavaScript)
class Solution {
public String convertToTitle(int columnNumber) {
StringBuilder sb = new StringBuilder();
while (columnNumber > 0) {
columnNumber--;
sb.append((char) ('A' + (columnNumber % 26)));
columnNumber /= 26;
}
return sb.reverse().toString();
}
}func convertToTitle(columnNumber int) string {
b := make([]byte, 0)
for columnNumber > 0 {
columnNumber--
b = append(b, byte('A'+columnNumber%26))
columnNumber /= 26
}
for i, j := 0, len(b)-1; i < j; i, j = i+1, j-1 {
b[i], b[j] = b[j], b[i]
}
return string(b)
}class Solution {
public:
string convertToTitle(int columnNumber) {
string s;
while (columnNumber > 0) {
columnNumber--;
s.push_back(char('A' + (columnNumber % 26)));
columnNumber /= 26;
}
reverse(s.begin(), s.end());
return s;
}
};class Solution:
def convertToTitle(self, columnNumber: int) -> str:
chars = []
while columnNumber > 0:
columnNumber -= 1
chars.append(chr(ord('A') + columnNumber % 26))
columnNumber //= 26
return ''.join(reversed(chars))/**
* @param {number} columnNumber
* @return {string}
*/
var convertToTitle = function(columnNumber) {
const chars = [];
while (columnNumber > 0) {
columnNumber--;
chars.push(String.fromCharCode('A'.charCodeAt(0) + (columnNumber % 26)));
columnNumber = Math.floor(columnNumber / 26);
}
chars.reverse();
return chars.join('');
};
Comments