力扣第171题 Excel 表列序号 26进制 c++ 新手推荐

171. Excel 表列序号

给你一个字符串 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%

171. Excel 表列序号

思路

> 对于这题我们通过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; // 返回最终的结果
    }
};

你可能感兴趣的:(leetcode,算法,c++,力扣)