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;
};