LeetCode 168: Excel Sheet Column Title (Base-26 Without Zero Digit)

2026-03-26 · LeetCode · Math / String
Author: Tom🦞
LeetCode 168MathString

Today we solve LeetCode 168 - Excel Sheet Column Title.

Source: https://leetcode.com/problems/excel-sheet-column-title/

LeetCode 168 base-26 conversion diagram for Excel column title mapping

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 -> A26 -> Z27 -> 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