168. Excel表列名称

题目链接:https://leetcode-cn.com/problems/excel-sheet-column-title/

思路:可以很容易想到是26进制,但是当我们用26进制来做的时候,发现会有一定的出入,比如说 ZY -> 701 当我们用26进制来写的时候会输出AZY。为什么呢,这里说一下:

1. 701 % 26 = 25 此时我们拼接 Y 然后 701 / 26 = 26

2. 26 % 26 = 0 此时我们拼接 Z 然后 26 / 26 = 1

3. 1 % 26 = 1 此时我们拼接 A

4. 1 / 26 = 0 循环结束

5. 得到YZA  反转字符串返回 AZY

错误代码:

class Solution {
    fun convertToTitle(columnNumber: Int): String {
        var str = ""
        var number = columnNumber
        while (number != 0) {
            //'A'.toInt() 可以转换为 'A'.code (此写法leetcode目前编译错误)
            val temp = when (number % 26) {
                0 -> 25
                else -> number % 26 - 1
            }
            str = str.plus((temp + 'A'.toInt()).toChar())
            number /= 26
        }
        return str.reversed()
    }
}

可以看到思路没问题,细节上有些问题,中间还多了一个判断。所以我们考虑每次循环的时候先减一就可以了~~~~

还是上面那个例子:

1. 701 - 1 = 700    700 % 26 = 24  此时我们拼接 Y 然后 700 / 26 = 26

2. 26 - 1 = 25    25 % 26 = 25  此时我们拼接 Z 然后 25 / 26 = 0

3. 循环结束

4. 得到YZ 反转字符串返回 ZY

正确代码:

class Solution {
    fun convertToTitle(columnNumber: Int): String {
        var str = ""
        var number = columnNumber
        while (number != 0) {
            //'A'.toInt() 可以转换为 'A'.code (此写法leetcode目前编译错误)
            number -= 1
            str = str.plus((number % 26 + 'A'.toInt()).toChar())
            number /= 26
        }
        return str.reversed()
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心脏dance

如果解决了您的疑惑,谢谢打赏呦

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

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

打赏作者

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

抵扣说明:

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

余额充值