leetcode:168. Excel表列名称
题目
给你一个整数 columnNumber
,返回它在 Excel 表中相对应的列名称。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例:
输入:columnNumber = 1
输出:"A"
输入:columnNumber = 28
输出:"AB"
输入:columnNumber = 701
输出:"ZY"
输入:columnNumber = 2147483647
输出:"FXSHRXW"
解答 & 代码
其实就类似于十进制数 num 取每一位的值:
- 从最低位开始取,每一位等于 num % 10,然后令 num = num / 10,接着循环取下一位(更高的一位)
- 最终将位次逆序,就得到了高位到低位的每一位
而这里的区别就两点:
- 这里是 26 进制,因此取每一位是 num % 26,然后令 num = num / 26
- 这里 26 进制的范围是 1~26,而不是 0~25,因此每一位应该是
(**num - 1**) % 26 + 'A'
复杂度分析:设整数 nclass Solution {
public:
string convertToTitle(int columnNumber) {
string result = ""; // 结果字符串
// 将数字转换为 26 进制,从右往左(从低位到高位)得到每一位
while(columnNumber > 0)
{
// 注意这里要先将数值 -1!!!,因为这类 26 进制是 1~26,而不是 0~25
--columnNumber;
result += columnNumber % 26 + 'A'; // 取余得到当前位
columnNumber /= 26; // 除 26
}
// 将结果逆序
reverse(result.begin(), result.end());
return result;
}
};
- 时间复杂度
:
- 空间复杂度 O(1):结果字符串不计入
执行结果:
执行结果:通过
执行用时:0 ms, 在所有 C++ 提交中击败了 100.00% 的用户
内存消耗:5.7 MB, 在所有 C++ 提交中击败了 75.33% 的用户