寒假每日一题(day7)

给你一个整数 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的情况是无法直接用余数转换的,所以我们需要单独提出这种情况,并让余数强行等于0
            if(remindNum==0){
                remindNum=26;
                //这里我们是强行等于0的所以要记得columnNumber减去一个余数26
                columnNumber=columnNumber-26;
            }
            matrix.append((char) (remindNum+64));
            columnNumber/=26;
        }
        return matrix.reverse().toString();
    }
}

寒假每日一题(day7)_第1张图片

 PS:这道题题解里为什么减一我没有看懂,有没有教我一下是什么意思(┬┬﹏┬┬)

你可能感兴趣的:(java,leetcode)