168. Excel表列名称
给你一个整数 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 <= columnNumber <= 231 - 1
题解:
其实就是一个26进制问题,不同的是这里只有1-26,没有0.
代码:
直接使用java中的String
类:
- 但是由于String的不可变性使得最后的答案无法反转,因此还是要借用一下StringBuffer类。
为什么结果要反转呢?
-
因为使用该程序第一次计算得到的结果其实是真正结果的最后一位,但是由于我们是按照计算顺序依次叠加上去的,所以会发现答案和我们得到的刚好相反。
-
并且由于前期使用
String
完成的增加的操作,由于字符串本身是不可变导致这样的话会增加很多内存,且每次给字符串增加时发现只能使用‘+’
来进行增加,而直接加的话不能为s = s + “A”+ columnNumber%26
,因为这里会自己进行转换,把数字转换成字符串形式加进去,因此结果里会有数字。 -
即java中对于字符的运算可以通过 数字+字母 来得到我们想要的字母,而字符串中则不行,因此我这里
通过打表
来完成操作。
class Solution {
public String convertToTitle(int columnNumber) {
String s = "";
String[] hash = {"A","B","C","D","E","F","G","H","I","J","K","L","M",
"N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
while(columnNumber!=0){
columnNumber--;
s = s + hash[columnNumber%26];
columnNumber/=26;
}
StringBuffer sBuff1 = new StringBuffer(s);
return sBuff1.reverse().toString();
}
}
直接使用StringBuffer
类及其方法:
class Solution {
public String convertToTitle(int columnNumber) {
StringBuffer s = new StringBuffer();
while(columnNumber!=0){
columnNumber--;
s.append((char)(columnNumber%26+'A'));
columnNumber/=26;
}
return s.reverse().toString();
}
}