原题链接:https://leetcode-cn.com/problems/excel-sheet-column-title/
题目
给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
...
示例 1:
输入: 1
输出: “A”
思路
逢26进1,应该是当成26进制来进行计算吧。
那就是把一个数,分解成26的几次方+26的几次方+几的形式,算出这些几,然后在对应到字母,输出。写一下,应该没啥问题。
那么问题来了,怎么算。初步思路是想把这个数除以26,得到倍数,如果该倍数大于26,那再除,直到小于26。除几次就表示最高是几次方,然后减一下,重复操作。
写了半天,忽略了一个问题,正常的26进制是0到25,而这个26进制是1到26。
之前的思路有点问题,求一个数字的进制表达式,是从低位求起的,把这个取模这个进制,比如说26,得出来的数就是最低位的数,接着再除以26,然后取模得到第二低位,以此类推。
本来取余26得到的结果是0到25,比方说52,应该是AZ,取余26对应的是0,并不是希望的结果,那么就把原数字减一然后取余,51取余26就是25,就是希望的余数了。
class Solution {
public:
string convertToTitle(int columnNumber) {
int num = columnNumber;
string text = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string res = "";
while(num > 0) {
num--;
int count = num % 26;
num /= 26;
res.push_back(text[count]);
}
reverse(res.begin(), res.end());
return res;
}
};