“给定一个字符串 columnTitle,表示Excel表格中的列名称,返回该列名称对应的列序号。”
题目链接:
来源:力扣(LeetCode)
链接: 171. Excel 表列序号 - 力扣(LeetCode)
给你一个字符串 columnTitle
,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 比如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入: columnTitle = "A"
输出: 1
示例 2:
输入: columnTitle = "AB"
输出: 28
这道题要求将Excle表中的列名称转换成列序号。
这道题跟168题Excle表列名称很类似,168题是将数字转化为列名称,这道题是将列名称转换为数字。
跟168解法类似,也是一个进制的转化,将大写字母转成26进制,然后再转成10进制,就是求得的数字。
代码参考:
class Solution {
public int titleToNumber(String s) {
int ans = 0;
for(int i=0;i<s.length();i++) {
int num = s.charAt(i) - 'A' + 1;
ans = ans * 26 + num;
}
return ans;
}
}
时间复杂度:O(n)
其中n是列名称colummTitle的长度,需要遍历列名称一次。
空间复杂度:O(1)
只需要常量级的空间。
遍历字符串,将字符串中的每个字母与A做减法,因为A表示1,减法后每个数加1,也就是:
num = 字母 - A + 1
因为是26进制,所以没26位进1,也就是:
ans = ans * 26 + num
比如ZY,Z的值是26,Y的值是25,则结果是:
26 * 26 + 25 = 701