1. 程式人生 > >LeetCode 168. Excel表列名稱(Excel Sheet Column Title)

LeetCode 168. Excel表列名稱(Excel Sheet Column Title)

取值 leetcode lee tco ring har size 整除 excel

題目描述

給定一個正整數,返回它在 Excel 表中相對應的列名稱。

例如,

    1 -> A
    2 -> B
    3 -> C
    ...
    26 -> Z
    27 -> AA
    28 -> AB 
    ...

示例 1:

輸入: 1
輸出: "A"

示例 2:

輸入: 28
輸出: "AB"

示例 3:

輸入: 701
輸出: "ZY"

解題思路

此題可看做把一個10進制的數轉換成26進制的列名,但由於列名稱裏沒有字母表示十進制的0,所以和單純的進制轉換又不太一樣。考慮由最低位開始從右往左來依次求解,最低位的數字範圍是1~26,分別對應列名中的A~Z。由列名X1

X2XkXk+1轉換成的十進制數可表示為

X1*26k + X2*26k-1 + …… + Xk*26 + Xk+1

可知去掉最低位的數字Xk+1後一定能被26整除,而Xk+1可以取1~26中的數,為了從要轉換的數字n中分離出最後一位,所以先把n減1,這樣Xk+1的取值變為0~25,讓n對26取余後得到的余數即為此時Xk+1對應的數,然後再令A~Z依次匹配0~25即可。最後一位確定後,令n=(n-1)/26,這樣得到結果列名依次右移一位的新列名對應的十進制數

X1*26k-1 + X2*26k-2 + …… + Xk

再對其遞歸求解,直到十進制數變為0。

代碼

 1 class Solution {
2 public: 3 string convertToTitle(int n) { 4 string res = ""; 5 while(n){ 6 res = (char)(A + (n - 1) % 26) + res; 7 n = (n - 1) / 26; 8 } 9 return res; 10 } 11 };

LeetCode 168. Excel表列名稱(Excel Sheet Column Title)