大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。
一、题目
1、算法题目
“给定一个字符串 columnTitle,表示Excel表格中的列名称,返回该列名称对应的列序号。”
2、题目描述
给你一个字符串 columnTitle
,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 比如:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...
示例 1: 输入: columnTitle = "A" 输出: 1
示例 2: 输入: columnTitle = "AB" 输出: 28
二、解题
1、思路分析
这道题要求将Excle表中的列名称转换成列序号。
这道题跟168题Excle表列名称很类似,168题是将数字转化为列名称,这道题是将列名称转换为数字。
跟168解法类似,也是一个进制的转化,将大写字母转成26进制,然后再转成10进制,就是求得的数字。
2、代码实现
代码参考:
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; } }
3、时间复杂度
时间复杂度: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