Every day a leetcode
题目来源:171. Excel 表列序号
解法1:数学
168. Excel表列名称的逆向题目。
本题实质上是特殊的 26 进制。
A ~ Z对应1 ~ 26。
假设 A = 0,B = 1,…,那么 AB = 261 * 0 + 260 * 1。
而这里是A = 1,B = 2,…,那么 AB = 261 * (0 + 1) + 260 * (1 + 1)。
设字符串columnTitle的长度为n,columnTitle[i]为下标为i的字符。
则该字符转换为数值 = pow(26, n - i - 1) * (columnTitle[i] - ‘A’ + 1)。
遍历一次字符串,求和即可。
代码:
/*
* @lc app=leetcode.cn id=171 lang=cpp
*
* [171] Excel 表列序号
*/
// @lc code=start
class Solution
{
public:
int titleToNumber(string columnTitle)
{
int sum = 0;
int n = columnTitle.size();
for (int i = 0; i < n; i++)
{
sum += pow(26, n - i - 1) * (columnTitle[i] - 'A' + 1);
}
return sum;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n),其中n为字符串的长度。
空间复杂度:O(1),只用到了2个辅助变量。