给你一个整数 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.会出现的余数为0~25的整数,但是余数为0时我们难以将其对应到字符Z
解决方法:将余数强行等于26,或者说抢一个26过来。
2.转换为字符形式输出
解决方法:将输出的数字强转为char形式,注意这里要求是大写输出,所以我们在转之前还要在余数上加上64.
3.倒序输出
做过二进制转换的都知道,进行进制转换的时候正确答案是从最后一个开始输出,因此我们得到答案的字符串实际上是反过来了。
这里是建议设置的时候直接设置成stringbuffer形式,这样可以直接用reverse进行转换,如果用string的话需要重新写一个方法,用数组逆序,会比较麻烦
代码:
public class exchangeText {public static void main(String[] args) {}public String convertToTitle(int columnNumber) {StringBuffer matrix=new StringBuffer();//设置余数int remindNum;while (columnNumber>0){remindNum=columnNumber%26;//题目中如果出现余数等于0的情况是无法直接用余数转换的,所以我们需要单独提出这种情况,并让余数强行等于0if(remindNum==0){remindNum=26;//这里我们是强行等于0的所以要记得columnNumber减去一个余数26columnNumber=columnNumber-26;}matrix.append((char) (remindNum+64));columnNumber/=26;}return matrix.reverse().toString();}
}
PS:这道题题解里为什么减一我没有看懂,有没有教我一下是什么意思(┬┬﹏┬┬)