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
Related Topics
数学
字符串
👍 626
👎 0
class Solution {
public String convertToTitle(int columnNumber) {
}
}
思路
- 本题最尴尬的是从1到26代表A-Z,而不是一般0-25
- 导致减1处理不好处理
- 当能被26整除时,最后一位是Z
实现
class Solution {
public String convertToTitle(int columnNumber) {
StringBuilder sb = new StringBuilder();
while (columnNumber != 0) {
int i = columnNumber % 26;
if (i == 0) {
i = 26;
columnNumber--;
}
sb.append(Character.toChars(i + 'A' - 1));
columnNumber = columnNumber / 26;
}
return sb.reverse().toString();
}
}
结果
解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:38.4 MB,击败了89.93% 的Java用户
思路
尝试用递归解决
优化1
class Solution {
public String convertToTitle(int columnNumber) {
StringBuilder sb = new StringBuilder();
method(sb,columnNumber);
return sb.reverse().toString();
}
public void method(StringBuilder sb,int num){
if (num==0) return;
int i = num%26;
if (i==0) {
i=26;
num--;
}
sb.append(Character.toChars(i+'A'-1));
method(sb,num/26);
}
}
结果
解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:38.8 MB,击败了19.90% 的Java用户