leetcode.168. Excel表列名称---字符串进制问题

168. Excel表列名称

给你一个整数 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 <= columnNumber <= 231 - 1

题解:

其实就是一个26进制问题,不同的是这里只有1-26,没有0.

代码:

直接使用java中的String类:

  • 但是由于String的不可变性使得最后的答案无法反转,因此还是要借用一下StringBuffer类。

为什么结果要反转呢?

  • 因为使用该程序第一次计算得到的结果其实是真正结果的最后一位,但是由于我们是按照计算顺序依次叠加上去的,所以会发现答案和我们得到的刚好相反。

  • 并且由于前期使用String完成的增加的操作,由于字符串本身是不可变导致这样的话会增加很多内存,且每次给字符串增加时发现只能使用 ‘+’ 来进行增加,而直接加的话不能为s = s + “A”+ columnNumber%26,因为这里会自己进行转换,把数字转换成字符串形式加进去,因此结果里会有数字。

  • 即java中对于字符的运算可以通过 数字+字母 来得到我们想要的字母,而字符串中则不行,因此我这里通过打表来完成操作。

class Solution {
    public String convertToTitle(int columnNumber) {
        String s = "";

        String[] hash =  {"A","B","C","D","E","F","G","H","I","J","K","L","M",
        "N","O","P","Q","R","S","T","U","V","W","X","Y","Z"};
        while(columnNumber!=0){
            columnNumber--;
            s = s + hash[columnNumber%26];
            columnNumber/=26;

        }

        StringBuffer sBuff1 = new StringBuffer(s);

        return sBuff1.reverse().toString();
    }
}

直接使用StringBuffer类及其方法:

class Solution {
    public String convertToTitle(int columnNumber) {
         StringBuffer s = new StringBuffer();
        while(columnNumber!=0){
            columnNumber--;
            s.append((char)(columnNumber%26+'A'));
            columnNumber/=26;

        }

        return s.reverse().toString();
    }
}

Java中的String字符串为什么不可变

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向光.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值