168.
给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入:columnNumber = 1
输出:"A"
示例 2:
输入:columnNumber = 28
输出:"AB"
示例 3:
输入:columnNumber = 701
输出:"ZY"
示例 4:
输入:columnNumber = 2147483647
输出:"FXSHRXW"
1.自己的解法:当成26进制进行使用,但是要注意的是题目是从1开始的,我们要手动减1,当作从0开始。
class Solution {
public String convertToTitle(int columnNumber) {
StringBuffer s = new StringBuffer();
while(columnNumber > 0){
columnNumber--;//手动减1
int res = columnNumber % 26;
s.append(numOfChar(res));
columnNumber = columnNumber / 26;
}
return s.reverse().toString();
}
public String numOfChar(int num){
String s = "";
switch(num){//从0开始
case 0: s = "A"; break;
case 1: s = "B"; break;
case 2: s = "C"; break;
case 3: s = "D"; break;
case 4: s = "E"; break;
case 5: s = "F"; break;
case 6: s = "G"; break;
case 7: s = "H"; break;
case 8: s = "I"; break;
case 9: s = "J"; break;
case 10: s = "K"; break;
case 11: s = "L"; break;
case 12: s = "M"; break;
case 13: s = "N"; break;
case 14: s = "O"; break;
case 15: s = "P"; break;
case 16: s = "Q"; break;
case 17: s = "R"; break;
case 18: s = "S"; break;
case 19: s = "T"; break;
case 20: s = "U"; break;
case 21: s = "V"; break;
case 22: s = "W"; break;
case 23: s = "X"; break;
case 24: s = "Y"; break;
case 25: s = "Z"; break;
}
return s;
}
}
2.答案解法:针对上述方法,可以继续进行改进,利用ascii码就不需要使用switch语句了。
class Solution {
public String convertToTitle(int columnNumber) {
StringBuffer sb = new StringBuffer();
while (columnNumber != 0) {
columnNumber--;
sb.append((char)(columnNumber % 26 + 'A'));
columnNumber /= 26;
}
return sb.reverse().toString();
}
}
题源:力扣
171.
给你一个字符串 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.自己的解法:从后往前遍历字符串,然后按照26进制来进行计算。
class Solution {
public int titleToNumber(String columnTitle) {
int sum = 0;//总和
int num = 1;
int index = columnTitle.length() - 1;//从末尾开始遍历
while(index >= 0){
int digit = (int)(columnTitle.charAt(index) - 'A' + 1);//当前遍历到的字符代表的数值
sum += num * digit;
num *= 26; //当成26进制来做
index--;
}
return sum;
}
}
题源:力扣