给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入:columnNumber = 1
输出:"A"
示例 2:
输入:columnNumber = 28
输出:"AB"
示例 3:
输入:columnNumber = 701
输出:"ZY"
示例 4:
输入:columnNumber = 2147483647
输出:"FXSHRXW"
提示:
1 <= columnNumber <= 231 - 1
cpp
class Solution {
public:
string convertToTitle(int columnNumber) {
string result;
while (columnNumber > 0) {
columnNumber--; // 将 columnNumber 减 1 以处理 0 基础问题
char ch = 'A' + (columnNumber % 26); // 计算当前字符
result = ch + result; // 在结果前添加字符
columnNumber /= 26; // 进入下一位
}
return result;
}
};
在计算之前将 columnNumber 减去 1。这是因为 Excel 列是以 1 为基数的,而运算实际上是基于 0 的。
ch 的值是 'A' 加上余数,这样可以得到对应的字符。0 到 25 的范围,表示字母 A 到 Z。
result = ch + result; 将当前字符 ch 添加到 result 的前面。这样可以保证字符顺序是从高位到低位,因为我们是从右到左进行计算的。
假设我们输入 columnNumber = 28:
-
初始
columnNumber为28:columnNumber--,变为27。27 % 26 = 1,所以ch = 'A' + 1 = 'B'。result现在是"B"。columnNumber /= 26,变为1。
-
下一次循环,
columnNumber为1:columnNumber--,变为0。0 % 26 = 0,所以ch = 'A' + 0 = 'A'。result现在是"AB"。columnNumber /= 26,变为0。
-
循环结束,返回
result,即"AB"。
创建一个映射 numToChar,用于将整数值映射到字符。键是整数,值是对应的字母。
cpp
class Solution {
public:
string convertToTitle(int columnNumber) {
map<int, char> numToChar; // 创建一个映射,将数字与对应的字母联系起来
for (int i = 0; i < 26; i++) {
numToChar[i] = 'A' + i;
}
string result;
while (columnNumber > 0) {
columnNumber--; // 将 columnNumber 减 1 以处理 0 基础问题
int index = columnNumber % 26 ; // 获取对应的索引
result = numToChar[index] + result; // 使用 map 查找对应的字符
columnNumber /= 26; // 进入下一位
}
return result;
}
};