题目
Given a positive integer, return its corresponding column title as appear in an Excel sheet.
For example:
1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB这种题跟整型转化为一个字符串,整型转化为一个二进制都是一个道理,使用递归比较适合本题,但是还是稍微有区别的,先来上代码
StringBuilder sb = new StringBuilder("");
public String convertToTitle(int n) {
n--;
if (n < 26) {
sb.append(intToChar(n));
return sb.toString();
}
convertToTitle(n/26);
sb.append(intToChar(n%26));
return sb.toString();
}
public char intToChar(int n) {
return (char)(n+'A');
}
看到什么区别了么?在这个函数的第一行有一个n--,因为这个看似是一个26进制问题,但是问题就来了,他的初始数字不是0是1,在你在使用除法和取余等操作的时候,自然用到了自然数的0这个特性,好像是这样吧。。。。所以把n减一,最后才是真正的26进制问题,是0~25的26进制(跟0~9的十进制,0~1的二进制等相同),而不是1~26的26进制。。。好像是这个道理吧。。。
追求代码的简洁性,更简练的代码
public String convertToTitle(int n) {
n--;
if (n < 26) {
return String.valueOf(intToChar(n));
}
return convertToTitle(n/26) + intToChar(n%26);
}
public char intToChar(int n) {
return (char)(n+'A');
}