给你一个整数 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;
}
};