5

LeetCode-168. Excel表列名称(java)

 2 years ago
source link: https://blog.51cto.com/u_15700751/5651108
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一、前言:

👨‍🎓作者:bug菌

✏️博客:CSDN、掘金等

💌公众号:​ ​猿圈奇妙屋​

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

       哈喽,小伙伴们,我是bug菌呀👀。金三银四,又到了刷题月啦。所以不管你是准备跳槽还是在职,都一起行动起来,顺应这个时代月干点该干的事儿👣。所以,赶紧跟着bug菌的步伐卷起来吧⏰,变强从这一刻开始!➕🧈

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

二、题目描述:

题目:

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

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

具体请看如下示例:

示例 1:

输入:columnNumber = 1
输出:"A"

示例 2:

输入:columnNumber = 28
输出:"AB"

示例 3:

输入:columnNumber = 701
输出:"ZY"

示例 4:

输入:columnNumber = 2147483647
输出:"FXSHRXW"

提示:

  • ​1 <= columnNumber <= 231 - 1​

题目来源:​ ​LeetCode官网​​ 题目难度:⭐⭐⭐

三、思路分析:

       拿到这题,审了审题意,才发现这就是一道从 1 开始的26进制转换题。对于一般性的进制转换题目,只需要不断地对 columnNumber 进行 % 运算取得最后一位,然后对columnNumber 进行 / 运算,将已经取得的位数去掉,直到 columnNumber 为 0 即可。 

       但本题需要我们将从1 开始,因此在执行「进制转换」操作前,我们需要先对columnNumber执行减一操作,从而实现整体偏移。

四、算法实现:

AC代码

具体算法代码实现如下:

class Solution {
public String convertToTitle(int {

StringBuilder stringBuilder = new StringBuilder();
//直到cn为0停止
while (cn != 0) {
cn--;
stringBuilder.append((char) (cn % 26 + 'A'));
cn /= 26;
}

//由于我们计算列名称的顺序是从右往左,因此需要将拼接后的结果反转。
stringBuilder.reverse();
return

五、总结:

leetcode提交运行结果截图如下:

LeetCode-168. Excel表列名称(java)_进制_03

 复杂度分析:

  • 时间复杂度:O(log26​cn)。时间复杂度即为将 cn 转换成26 进制的位数。
  • 空间复杂度:O(1)。返回值不计入空间复杂度。

       这题还是挺好玩的,主要是你能观察到和正常 0~25 的 26 进制相比,本质上就是每一位多加了 1。假设 A == 0,B == 1,那么 AB = 26 * 0 + 1 * 1,而现在 AB = 26 * (0 + 1) + 1 * (1 + 1),所以只要在处理每一位的时候减 1,就可以按照正常的 26 进制来处理。

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

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

六、热门推荐:


七、文末:

 ​《每日一题LeetCode》​​,带着你一块儿刷题,专栏每一篇都附带详细解法,手把手带你解题。

        一个人刷可能会觉得很累很难坚持,但是一群人刷就会觉得它是一件很有意义的事儿,互相督促互相鼓励,一起变强。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

最后送大家两句话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start,

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


LeetCode-168. Excel表列名称(java)_进制转换_04

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧【QQ交流群:708072830】;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK