题目
Excel中的列名,和其序号有如下关系:
A-1
B-2
……
Z-26
AA-27
AB-28
题目1:现给定一个列名求其序号
题目2:给定一个序号,求其对应的列名
分析
题目2直接处理不容易考虑清楚,先完成题目1,再进行倒推比较容易。
题目1解法。A- Z对应1-26。如果在高位则乘以26。
代码如下:
class Solution {
public int titleToNumber(String columnTitle) {
int num = 0;
for (int i = 0; i < columnTitle.length(); i++) {
num = num * 26 + columnTitle.charAt(i) - 'A' + 1;
}
return num;
}
}
根据这个公式可以反推chatAt(i) = (num - 1) % 26 + ‘A’
next_num= (num - 1) / 26
故题目1代码如下:
class Solution {
public String convertToTitle(int columnNumber) {
StringBuilder sb = new StringBuilder();
while (columnNumber != 0) {
int next = (columnNumber - 1) % 26;
sb.append((char) ('A' + next));
columnNumber = (columnNumber - 1) / 26;
}
return sb.reverse().toString();
}
}