给定一个正整数,返回它在 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;
}
};