LeetCode171-Excel表列序号
- 1、问题描述
- 2、解题思路:进制转换
- 3、代码实现
1、问题描述
给你一个字符串columnTitle
,表示Excel表格中得列名称。返回该列名称对应得列序号。
例如:
代码语言:javascript复制A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
代码语言:javascript复制输入: columnTitle = "A"
输出: 1
示例 2:
代码语言:javascript复制输入: columnTitle = "AB"
输出: 28
示例 3:
代码语言:javascript复制输入: columnTitle = "ZY"
输出: 701
提示:
1 <= columnTitle.length <= 7
columnTitle
仅由大写英文组成columnTitle
在范围["A", "FXSHRXW"]
内
2、解题思路:进制转换
这个我们可以仿照十进制中的进制转换方法,通常我们在从高位向低位处理的时候,起始设置nums=0,然后每次使用当前位的数值更新nums,更新的公式为
,这个v就是当前位的数字。
本题只需要将10进位换成26即可(A-Z有26个字母),即更新公式为
假设我们给的输入为columnTitle='ZY'
,首先Z和Y对应的索引分别为26和25(从1开始,这道题没有0对应的字母),那么我们的计算公式如下:
3、代码实现
代码语言:javascript复制由于本题没有0,所以代码中在减去’A’之后要 1.
package leetcode1;
/**
* Excel表列序号
*/
public class LeetCode171 {
/**
* 进制转换,
* 通用规则如下,ans=0,ans=ans*进制 vali
* 这里为ans=ans*26 vali,但是由于没有0,所以减去'A'之后要 1
*/
public static int titleToNumber(String columnTitle) {
int ans=0;
for (int i = 0; i <columnTitle.length(); i ) {
int num = columnTitle.charAt(i) - 'A' 1;
ans=ans*26 num;
}
return ans;
}
public static void main(String[] args) {
System.out.println(titleToNumber("ZY"));
System.out.println(titleToNumber("FXSHRXW"));
System.out.println(titleToNumber("AZY"));
}
}
测试结果如下: