每日一道 LeetCode (38):Excle 表列名称

每天 3 分钟,走上算法的逆袭之路。

前文合集

每日一道 LeetCode 前文合集

代码仓库

GitHub: https://github.com/meteor1993/LeetCode

Gitee: https://gitee.com/inwsy/LeetCode

题目:Excle 表列名称

题目来源:https://leetcode-cn.com/problems/excel-sheet-column-title/

给定一个正整数,返回它在 Excel 表中相对应的列名称。

例如,

    1 -> A
    2 -> B
    3 -> C
    ...
    26 -> Z
    27 -> AA
    28 -> AB 
    ...

示例 1:

输入: 1
输出: "A"

示例 2:

输入: 28
输出: "AB"

示例 3:

输入: 701
输出: "ZY"

解题思路

这道题读完一遍完全不知道是让算什么东西,但是我如果把解题的思路讲出来,我相信有一半的小伙伴都会做。

我如果再举两个例子,我相信超过 90% 的小伙伴都会做。

嗯,我就是那个不看答案不会做一看答案就懂的人。

这道题实际上是在求一个十进制数对应的 26 进制的结果是什么,如果把 Excel 的列名命名规则理解成是一个 26 进制。

现在明白是在求什么了,那么 10 进制转其他进制怎么转。

先看个最简单的例子, 10 进制转 10 进制。

我们用 123 举例子:

123 / 10^0 % 10 = 3
123 / 10^1 % 10 = 2
123 / 10^2 % 10 = 1

然后我们把结果逆序输出得到了 123 。

如果是转 2 进制呢?

123 / 2^0 % 2 = 1
123 / 2^1 % 2 = 1
123 / 2^2 % 2 = 0
123 / 2^3 % 2 = 1
123 / 2^4 % 2 = 1
123 / 2^5 % 2 = 1
123 / 2^6 % 2 = 1

把结果逆序输出后得到的是 1111011 。

那么转 26 进制怎么转实际上已经有结果了。

123 / 26^0 % 26 = 19
123 / 26^1 % 26 = 4

对应到这道题里的结果就是 A + 4A + 19 得到的 ASCII 值转成字母再逆序输出,得到的结果是 ET

public String convertToTitle(int n) {
    StringBuilder sb = new StringBuilder();
    while (n != 0) {
        n--;
        sb.append((char) ('A' + n % 26));
        n /= 26;
    }
    return sb.reverse().toString();
}

注意这里有一个 n-- ,因为正常的 26 进制是从 0 ~ 25 的,是没有最高位 26 的,但是这道题的范围是 1 ~ 26 ,所以每次计算的时候需要将 n 减去 1 。

扫描二维码关注「极客挖掘机」公众号!
作者:极客挖掘机
定期发表作者的思考:技术、产品、运营、自我提升等。

本文版权归作者极客挖掘机和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
如果您觉得作者的文章对您有帮助,就来作者个人小站逛逛吧:极客挖掘机
原文地址:https://www.cnblogs.com/babycomeon/p/13621394.html