力扣第171题 Excel 表列序号 26进制 c++ 新手推荐
给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。
例如:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...
示例 1:
输入: columnTitle = "A" 输出: 1
示例 2:
输入: columnTitle = "AB" 输出: 28
示例 3:
输入: columnTitle = "ZY" 输出: 701
提示:
- 1 <= columnTitle.length <= 7
- columnTitle仅由大写英文组成
- columnTitle在范围- ["A", "FXSHRXW"]内
通过次数 169.3K 提交次数 237.4K 通过率 71.3%
思路
> 对于这题我们通过A~Z为单位的26进制的解法。
解题方法
> C++语言的代码,用于将Excel表格中的列字母转换为对应的数字。
>具体的做法是针对每个字母,将其转化为对应的数字。对于这个过程,我们可以使用26进制的方式,因为Excel中的列字母是由A~Z这26个字符组成的。
具体解释如下:
>定义一个变量ans,表示最终转化得到的数字,初始化为0。
>使用一个循环遍历输入字符串columnTitle中的每个字符,循环变量为变量i,从0到columnTitle.size()(字符串长度)。
>在每次循环中,将当前数字ans乘上26(相当于进位),然后加上当前字符转化而来的数字。这里需要注意,在ASCII码表中,字母A~Z分别对应的数字是65~90,而我们需要将它们映射为1~26,因此需要减去'A'的ASCII码值(即65)后再加上1。
>循环结束后,变量ans中存储的就是列字母所对应的数字。
>将ans作为函数的返回值。
>这段代码的时间复杂度为O(n),其中n是字符串的长度,因为需要遍历整个字符串并进行转化操作。空间复杂度为O(1),因为只需要使用一个变量ans来存储结果。
>综上所述,该代码是比较简单的字符串转化操作,使用了26进制的方式进行转化。
复杂度
- 时间复杂度:
> $O(n)$
- 空间复杂度:
> $O(1)$
# Code
```C++ []
class Solution {
public:
int titleToNumber(string columnTitle) {
int ans = 0; // 用于存储最终转换得到的数字
// 遍历输入字符串columnTitle中的每个字符
for (int i = 0; i < columnTitle.size(); i++)
{
ans *= 26; // 将已有结果乘上26(相当于进位)
// 将当前字符转化为对应的数字,并加到结果上
ans += (columnTitle.at(i) - 'A') + 1;
// 注意:在ASCII码表中,字母A~Z分别对应的数字是65~90,而我们需要将它们映射为1~26
// 所以需要将当前字符的ASCII码值减去'A'的ASCII码值(即65),然后再加上1
}
return ans; // 返回最终的结果
}
};
```
代码部分
class Solution {
public:
    int titleToNumber(string columnTitle) {
        int ans = 0; // 用于存储最终转换得到的数字
        // 遍历输入字符串columnTitle中的每个字符
        for (int i = 0; i < columnTitle.size(); i++)
        {
            ans *= 26; // 将已有结果乘上26(相当于进位)
            // 将当前字符转化为对应的数字,并加到结果上
            ans += (columnTitle.at(i) - 'A') + 1;
            // 注意:在ASCII码表中,字母A~Z分别对应的数字是65~90,而我们需要将它们映射为1~26
            // 所以需要将当前字符的ASCII码值减去'A'的ASCII码值(即65),然后再加上1
        }
        return ans; // 返回最终的结果
    }
}; 
                     
                    
                 
                    
                 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号