LeetCode-171. Excel 表列序号(java)
Posted bug菌¹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode-171. Excel 表列序号(java)相关的知识,希望对你有一定的参考价值。
一、前言🔥
👨🎓作者:bug菌
💌公众号:猿圈奇妙屋
🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。
🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。
哈喽,小伙伴们,我是bug菌呀👀。由于上海这波疫情,导致很多小伙伴扛不住降薪打击而选择离开自己的上家,借此, 对于没有工作或者即将失业要重新面试的小伙伴而言,bug菌想接着把上几个月更新的专栏《每日一题LeetCode》给重新捯饬起来,只为帮助小伙伴们,能顺利上岸,收到自己心仪的offer,面试第一关, 就是算法题。因为我始终坚信,变强绝对不是一朝一夕,而是贵在长久坚持,持之以恒。所以,赶紧跟着bug菌的步伐卷起来吧⏰,变强从这一刻开始➕🧈。
小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻♀️,创作不停💕,加油☘️
二、题目描述🔥
题目:
给你一个字符串
columnTitle
,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。
例如:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...
具体请看如下示例:
示例 1:
输入: columnTitle = "A"
输出: 1
示例 2:
输入: columnTitle = "AB"
输出: 28
示例 3:
输入: 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代码:
具体算法代码实现如下:
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 ans;
内置位计数法-AC代码:
具体算法代码实现如下:
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 ans;
五、总结🔥
进制转换法-leetcode提交运行结果截图如下:
复杂度分析:
- 时间复杂度:O(n)
- 空间复杂度:O(1)
进制转换法-leetcode提交运行结果截图如下:
复杂度分析:
- 时间复杂度: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’,我这样总结,你们是不是就能理解了。所以相对而言这道题就是纯粹考进制转化。
再者,解题道路千万条,欢迎小伙伴们脑洞大开,如果你们有啥更好的想法或者思路,欢迎评论区告诉我哦,大家一起互相借鉴互相学习,方能成长的更快。
好啦,以上就是本期的所有内容啦,咱们下期见咯。
六、热门推荐🔥
- leetcode-9.回文数
- leetcode-1.两数之和
- leetcode-13.罗马数字转整数
- leetcode-14.最长公共前缀
- leetcode-20.有效的括号
- leetcode-21.合并两个有序链表
- leetcode-26. 删除有序数组中的重复项
七、文末🔥
如果你还想要学习更多,小伙伴们大可关注bug菌专门为你们创建的专栏《每日一题LeetCode》,带着你一块儿刷题,专栏每一篇都附带详细解法,手把手带你解题。
一个人刷可能会觉得很累很难坚持,但是一群人刷就会觉得它是一件很有意义的事儿,互相督促互相鼓励,一起变强。
我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!
最后送大家两句话,与诸君共勉!
☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start,
🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。
💌如果文章对您有所帮助,就请留下您的赞吧!(#^.^#);
💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;
💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;
💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);
💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。
以上是关于LeetCode-171. Excel 表列序号(java)的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 171 Excel表列序号[进制转换] HERODING的LeetCode之路