168. Excel Sheet Column Title
Leetcode 问题: 168. Excel Sheet Column Title
Categories:
题目
Given an integer
columnNumber
, return its corresponding column title as it appears in an Excel sheet.
传入 栏位数字 columnNumber
,回传 Excel 对应的标题
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
Example
Input: columnNumber = 1
Output: "A"
Input: columnNumber = 28
Output: "AB"
Input: columnNumber = 701
Output: "ZY"
演算法
1. 转换索引对应方式
因为索引是从 1 开始对应到 A,所以将索引值 -1,让索引 0 对应到 A
原索引 | 对应字母 | 改变后索引 |
---|---|---|
1 | A | 0 |
2 | B | 1 |
3 | C | 2 |
2. 取馀数计算目前最右侧标题
对传入的栏位数字对 26 取馀数,然后加上起始字母 A
的 Ascii,就可以得到目前最右侧标题的字母 Ascii Code
3. 取得左侧标题
若传入栏位数大于 26 时,则必须继续取得剩馀的左侧标题
所以将栏位数除以 26,然后无条件捨去,传入同一个计算标题函式,就可以继续取得剩馀的左侧标题,直到剩馀栏位数变成 0 无法取得为止
答案
JavaScript
function convertToTitle(columnNumber) {
if (columnNumber == 0) {
// 若栏位数是 0,则不需要再计算
return '';
}
// 因为索引是从 1 开始对应到 A,将索引值 -1,让索引 0 对应到 A
columnNumber--;
// 目前标题 Ascii Code:取个位数字母 mod 值 + 字串 A Ascii Code 值
var currentTitleAsciiCode = (columnNumber % 26) + 'A'.charCodeAt(0);
// 转换目前标题 Ascii Code 为字母
var currentTitle = String.fromCharCode(currentTitleAsciiCode);
// 计算是否有剩馀数字,需要加入栏位前方名称
var remainTitleColumnNumber = Math.floor(columnNumber / 26);
// 最后标题:馀数标题 + 目前标题
var finalExcelTitle = convertToTitle(remainTitleColumnNumber) + currentTitle;
return finalExcelTitle;
}
TypeScript
function convertToTitle(columnNumber: number): string {
if (columnNumber==0) {
// 若栏位数是 0,则不需要再计算
return '';
}
// 因为索引是从 1 开始对应到 A,将索引值 -1,让索引 0 对应到 A
columnNumber--;
// 目前标题 Ascii Code:取个位数字母 mod 值 + 字串 A Ascii Code 值
let currentTitleAsciiCode = (columnNumber % 26) + 'A'.charCodeAt(0);
// 转换目前标题 Ascii Code 为字母
let currentTitle = String.fromCharCode(currentTitleAsciiCode);
// 计算是否有剩馀数字,需要加入栏位前方名称
let remainTitleColumnNumber = Math.floor(columnNumber / 26);
// 最后标题:馀数标题 + 目前标题
let finalExcelTitle = convertToTitle(remainTitleColumnNumber) + currentTitle;
return finalExcelTitle;
};