- Excel 表列序号 (LeetCode)
题目 给你一个字符串 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
示例 4:
输入: columnTitle = “FXSHRXW”
输出: 2147483647
提示:
1 <= columnTitle.length <= 7
columnTitle 仅由大写英文组成
columnTitle 在范围 [“A”, “FXSHRXW”] 内
先把解题丢出来吧
题目意思:
个位 A = 1;
十位 A = 1 * 26;
百位 A = 1 * 26 * 26;
个位 B = 2;
十位 B = 2 * 26;
百位 B = 2 * 26 * 26;
输出:个位+十位+百位
eg:
AB = A : 1 * 26 + B : 1 = 27
ZY = Z : 26 * 26 + Y : 25 = 701
所以我们可以得出规律:
位值:应该就是 当前的 字符所代表的值 乘以 26 的 n 次方
n :个位零次,十位一次,百位两次,,,可以得知,是当前字符所在的 位置决定的,
换算成代码,应该就是 (当前位 - 1) 次方;
Math.pow(底数,几次方)
eg : Math.pow(4,3) = 4 的 3 次幂 (444) 的值 = 4 * 4 * 4
思路: ascii码 是递增的 类似 A~Z ,而ascii码 A = 65 ,B = 66 ,,,
我们可以通过获取 该字符的 ascii码 值减去 64 就等于当前 字符代表的个位数 的数值
然后 算下 当前值 是多少,然后累加。
private int result(String columnTitle){
//用于统计总数
int count = 0;
// 确定顺序 从左到右 从最高位开始
for (int i = 0 ; i < columnTitle.length() ; i++){
//获取 字符
char temp = columnTitle.charAt(i);
//获取 字符代表的数字
int num = temp - 64;
//获取当前 字符的次方值
double rate = Math.pow(26,columnTitle.length() - 1 - i);
//转成int型
int t1 = Double.valueOf(rate).intValue();
//总计 加上 这次的值 数字*次方值
count = count + num * t1 ;
}
return count;
}