给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
...
示例 1:
输入: 1
输出: “A”
示例 2:
输入: 28
输出: “AB”
示例 3:
输入: 701
输出: “ZY”
public static String convertToTitle(int n) {
Map<Integer, String> hash = new HashMap<>();
hash.put(1, "A");
hash.put(2, "B");
hash.put(3, "C");
hash.put(4, "D");
hash.put(5, "E");
hash.put(6, "F");
hash.put(7, "G");
hash.put(8, "H");
hash.put(9, "I");
hash.put(10, "J");
hash.put(11, "K");
hash.put(12, "L");
hash.put(13, "M");
hash.put(14, "N");
hash.put(15, "O");
hash.put(16, "P");
hash.put(17, "Q");
hash.put(18, "R");
hash.put(19, "S");
hash.put(20, "T");
hash.put(21, "U");
hash.put(22, "V");
hash.put(23, "W");
hash.put(24, "X");
hash.put(25, "Y");
hash.put(26, "Z");
int i = n / 26;
int j = n % 26;
if(i == 1 && j == 0){
i = 0;
j = 26;
}
if(j == 0){
j = 26;
i --;
}
String target = hash.get(j);
StringBuilder tarBuilder = new StringBuilder(target);
while (i != 0) {
j = i % 26;
i = i / 26;
if(i == 1 && j == 0){
i = 0;
j = 26;
}
if(j == 0){
i --;
j = 26;
}
String target1 = hash.get(j);
StringBuilder tarBuilder1 = new StringBuilder(target);
tarBuilder.append(target1);
}
String s1 = tarBuilder.reverse().toString();
return s1;
}
看看别人的代码,很简单,还值得我去优化
class Solution {
public String convertToTitle(int n) {
StringBuilder res= new StringBuilder();
while (n>0) {
res.append((char)(--n % 26 + 'A'));
n /= 26;
}
return res.reverse().toString();
}
}