Every day a leetcode
题目来源:168. Excel表列名称
解法1:数学
本题实质上是特殊的 26 进制。
A ~ Z对应1 ~ 26。
假设 A = 0,B = 1,…,那么 AB = 26 * 0 + 1 * 1。
而这里是A = 1,B = 2,…,那么 AB = 26 * (0 + 1) + 1 * (1 + 1)。
本质上就是每一位多加了1。
所以只要在处理每一位的时候减 1,就可以按照正常的 26 进制来处理。
最后记得将字符串反转。
代码:
/*
* @lc app=leetcode.cn id=168 lang=cpp
*
* [168] Excel表列名称
*/
// @lc code=start
class Solution
{
public:
string convertToTitle(int columnNumber)
{
string temp;
while (columnNumber)
{
columnNumber -= 1;
temp += 'A' + columnNumber % 26;
columnNumber /= 26;
}
return string(temp.rbegin(), temp.rend());
}
};
// @lc code=end
结果:

复杂度分析:

该问题涉及到将数字转换为Excel表格中的列名。解法1利用了26进制的概念,每个字母对应一个数字,从A(1)到Z(26)。算法通过每次减1并模26来计算对应的字母,然后将结果拼接成字符串,最后反转字符串得到正确的列名。
1494

被折叠的 条评论
为什么被折叠?



