前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode-171. Excel 表列序号(java)

LeetCode-171. Excel 表列序号(java)

作者头像
bug菌
发布2023-05-27 15:07:10
2100
发布2023-05-27 15:07:10
举报

一、前言🔥

👨‍🎓作者:bug菌 ✏️博客:CSDN​、掘金等 💌公众号:​​猿圈奇妙屋​​ 🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。 🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

二、题目描述🔥

题目:

        给你一个字符串 ​​columnTitle​​ ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。

例如:

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

具体请看如下示例:

示例 1:

代码语言:javascript
复制
输入: columnTitle = "A"
输出: 1

示例 2:

代码语言:javascript
复制
输入: columnTitle = "AB"
输出: 28

示例 3:

代码语言:javascript
复制
输入: columnTitle = "ZY"
输出: 701

提示:

  • ​1 <= columnTitle.length <= 7​
  • ​columnTitle 仅由大写英文组成​
  • ​columnTitle 在范围 ["A", "FXSHRXW"] 内​

题目来源:​​LeetCode原题地址​​ 题目难度:⭐⭐

三、思路分析🔥

《168. Excel表列名称》,它是给你一个整数 columnNumber ,然后返回它在 Excel 表中相对应的列名称,而这道题是它的逆向衍生题,给你excel表中的列名称,要你返回所对应的列序号。

        具体如何实现啊?这里我提供两种思路。具体如下:

思路1:

        模拟法,首先我们将这个​​columnTitle​​ 看成是一个26进制数,然后再将这个26进制的数转为10进制数! 就和简单2进制,5进制,16进制转10进制原理一样!所以这里提前将A-Z代表什么数用数组存储起来!方便你对应。

思路2:

        我们先初始化结果ans = 0,然后对​​columnTitle进行遍历,在​​遍历时将每个字母都与 A 做减法,因为 A 表示 1,所以对其减法后都需要每个数再加 1,所以计算其字母代表的数值为 num = [字母 - ‘A’ + 1],因为有 26 个字母,就相当于 26 进制,每 26 个数则向前进一位(逢26进1),所以每遍历一位则ans = ans * 26 + num,以 AAA 为例,最右边的A =1,AA=26*1+1,AAA =A*(AA) =   26 * (26*1+1)+ 1=703。

四、算法实现🔥

模拟法-AC代码:

具体算法代码实现如下:

代码语言:javascript
复制
class Solution1 {
            public int titleToNumber(String columnTitle) {
                int[] nums = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
                        , 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26};
                int length = columnTitle.length();
                int ans = 0;
                for (int i = length - 1, j = 0; i >= 0 && j < length; i--, j++) {
                    int num = nums[columnTitle.charAt(i) - 'A'];
                    ans += num * Math.pow(26, j);
                }
                return

内置位计数法-AC代码:

具体算法代码实现如下:

代码语言:javascript
复制
class Solution2 {
    public int titleToNumber(String columnTitle) {
            int ans = 0;
            for(int i=0;i<columnTitle.length();i++) {
                int num = columnTitle.charAt(i) - 'A' + 1;
                ans = ans * 26 + num;
            }
            return

五、总结🔥

进制转换法-leetcode提交运行结果截图如下:

LeetCode-171. Excel 表列序号(java)_进制转换_02
LeetCode-171. Excel 表列序号(java)_进制转换_02

复杂度分析:

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

进制转换法-leetcode提交运行结果截图如下:

LeetCode-171. Excel 表列序号(java)_进制转换_03
LeetCode-171. Excel 表列序号(java)_进制转换_03

复杂度分析:

  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

       总结一下:这道题其实考的就是你们对进制转换熟不熟悉,本质就是26进制转换,比如A就是1,那AA呢?不就是1*26+1嘛,那AAA呢?不就是 26 * (26*1+1)+ 1,再比如'BC',c = 3,B=2所以'BC' = 26*(2)+3 = 55;这样你们明白了么?你们就当成进制转换题,无非就是有点拗口,无非就是十进制题,只不过这道题它是由指定字母来代替,比如1=A,2=B,这样子,比如55转换成26进制,不就等于55/26 = 2...3对应起来不就是‘BC’,我这样总结,你们是不是就能理解了。所以相对而言这道题就是纯粹考进制转化。

       再者,解题道路千万条,欢迎小伙伴们脑洞大开,如果你们有啥更好的想法或者思路,欢迎评论区告诉我哦,大家一起互相借鉴互相学习,方能成长的更快。

       好啦,以上就是本期的所有内容啦,咱们下期见咯。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言🔥
  • 二、题目描述🔥
  • 三、思路分析🔥
  • 四、算法实现🔥
  • 五、总结🔥
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档