LeetCode 168. Excel表列名稱(Excel Sheet Column Title)
阿新 • • 發佈:2018-06-16
取值 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 X2…XkXk+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)