zoukankan      html  css  js  c++  java
  • 每日一道 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 。

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

    本文版权归作者极客挖掘机和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    如果您觉得作者的文章对您有帮助,就来作者个人小站逛逛吧:极客挖掘机
  • 相关阅读:
    博客搬迁
    Android 集成FaceBook实现第三方登陆
    android-Xfermode模式详解
    android FileNotFoundException
    EditText 隐藏或者显示输入内容
    Fragment+ViewPager静止滑动,去掉默认的滑动效果
    Xcode 常用插件(持久更新)
    XMPP- JID 与 XMPP的命名空间
    android openfire 和 xmpp
    IOS-数据持久化的几种方式
  • 原文地址:https://www.cnblogs.com/babycomeon/p/13621394.html
Copyright © 2011-2022 走看看