168. Excel表列名称(简单)
思路
-
显然,这是一道从 1 开始的的 26 进制转换题。
-
对于一般性的进制转换题目,只需要不断地对 columnNumber 进行 % 运算取得最后一位,然后对 columnNumber 进行 / 算,将已经取得的位数去掉,直到columnNumber 为 0 即可。
-
一般性的进制转换题目无须进行额外操作,是因为我们是在「每一位数值范围在
[0,)
的前提下进行 逢 a 进一」,比如二进制每一位数值范围为[0, 2)
。 -
但本题从1 开始,因此在执行「进制转换」操作前,我们需要先对columnNumber 执行减一操作,从而实现整体偏移,使得数值范围回到 [0, 26) ,这样才和一般的进制转换题目相同。
代码
class Solution {
public:
string convertToTitle(int columnNumber) {
string ans;
char per;
int a, b;
while(columnNumber){
columnNumber --;
a = columnNumber / 26 ,b = columnNumber % 26;
ans.push_back('A' + b);
columnNumber = a;
}
reverse(ans.begin(), ans.end());
return ans;
}
};
收获
- 做这道题的时候,一下子就反应过来,是 26 进制的题目,但是没有思考到每一位的数字范围应该在
[0, 26)
,导致计算一直出错; - 此外,进制转换类型的题目模板不够熟悉,想了很久;
- 学习到一个新函数
reverse(ans.begin(), ans.end());
,可以将答案字符串反转,这个写法比较高级。