一、题目描述
给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
...
示例 1:
输入: 1
输出: "A"
示例 2:
输入: 28
输出: "AB"
示例 3:
输入: 701
输出: "ZY"
二、解题思路
本题本质就是进制转换,10进制转26进制,但有所不同的是正常转换成26进制的余数是0-25,
而本题的余数是1-26(对应A-Z),为了消除差距的这个1,有两种方法:
①让除数减一,那么余数自然就少一,原来余 1 的变成余 0,以此类推。
核心代码 remain = (n - 1) % 26;
class Solution {
public:
string convertToTitle(int columnNumber) {
string rs="";
while(columnNumber>0){
columnNumber--;
int remainder=columnNumber%26;
char ch='A'+remainder;
rs='A'+ch+rs;
int columnNumber=columnNumber/26;
char ch2='A'+columnNumber;
rs=ch2+rs;
}
return rs;
}
};
②对值为 26 的倍数单独处理,保留为 26,而不取余
核心代码 remain = n % 26 ? n % 26 : 26;
class Solution {
public:
string convertToTitle(int columnNumber) {
string rs="";
while(columnNumber>0){
int remain = columnNumber % 26 ? columnNumber % 26 : 26;
//A的unicode编码是65
char ch=64+remain;
rs=ch+rs;
columnNumber=(columnNumber-remain)/26;
}
return rs;
}
};
欢迎关注微信公众号【算法攻城师】