当前位置: 代码迷 >> 综合 >> 寒假每日一题(day7)
  详细解决方案

寒假每日一题(day7)

热度:46   发布时间:2023-12-03 07:04:29.0

给你一个整数 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:这道题题解里为什么减一我没有看懂,有没有教我一下是什么意思(┬┬﹏┬┬)