题目
题解
刚开始以为是26进制数,后来发现也不太一样,26进制数是[0,25],而此处的规则是[1,26],所以AB不是
26
∗
0
+
1
∗
1
26*0+1*1
26∗0+1∗1,而是
26
∗
1
+
1
∗
1
26*1+1*1
26∗1+1∗1,因此想办法把这个规则转成26进制数,再解决
思路同十进制转二进制:先模再除倒输出
错误做法:
class Solution {
public String convertToTitle(int columnNumber) {
int n=columnNumber;
StringBuffer a=new StringBuffer();//记录模26余数,转字母后倒输出即要求结果
while(n>0){
a.append((char)(n%26+64));
n=n/26;
}
return a.reverse().toString();
}
}
错误原因: 26 % 26 = 0 26\%26=0 26%26=0,本来应该输出Z,结果输出@A
正解:- -n是题解的关键,其目的是将n从[1,26]转换到[0,25],使它真真正正成为26进制数
class Solution {
public String convertToTitle(int columnNumber) {
int n=columnNumber;
StringBuffer a=new StringBuffer();//记录模26余数,转字母后倒输出即要求结果
while(n>0){
a.append((char)((--n)%26+'A'));//重点是模除之前n先减一
n=n/26;
}
return a.reverse().toString();
}
}