Excel表列序号

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/excel-sheet-column-number

题目描述:

给定一个Excel表格中的列名称,返回其相应的列序号。
例如,
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...

示例 1:

输入: "A"
输出: 1

示例 2:

输入: "AB"
输出: 28

示例 3:

输入: "ZY"
输出: 701

思路:
  • 将16进制数abc,转成10进制,我们是怎么做的呢,

第0位的全值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方...第n位的权值为16的n次方。将各个位的数字乘以位权,然后再相加,就得到了十进制形式。

c * 16^0 + b * 16 ^ 1 + c * 16^2

用代码表达出来也就是

String columnTitle = "abc";
 int index = 0;
        for (int i = 0; i < columnTitle.length(); i++) {
            index = index * 16 + Integer.valueof(columnTitle.charAt(i) + "");
        }
 return index;

把上面的for循环展开 (((0 * 16) + a) * 16 + b) * 16 + c = c * 16^0 + b * 16 ^ 1 + c * 16^2

本题本质上也是一个进制转换题,只不过不是16进制转10进制,而是26进制转10进制,需要注意的一点就是,'A'上从1开始的,因此常数项需要加上1.

代码实现:
class Solution {
    public int titleToNumber(String columnTitle) {
        int index = 0;
        for (int i = 0; i < columnTitle.length(); i++) {
            index = index * 26 + (columnTitle.charAt(i) - 'A' + 1);
        }
        return index;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容