这是悦乐书的第180次更新,第182篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第39题(顺位题号是168)。给定正整数,返回Excel工作表中显示的相应列标题。例如:

1 - > A.

2 - > B.

3 - > C.

26 - > Z.

27 - > AA

28 - > AB

输入:1

输出:“A”



输入:28

输出:“AB”



输入:701

输出:“ZY”

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

通过题目的几个小例子,最后得到的字符串结果,可以将其拆分两部分,一部分是除以26的商,一个是除以26的余数,余数肯定是会小于26的,但是商却是有可能大于26的,这时就需要利用循环或者递归来处理。

当n小于等于0的时候,直接返回空串。

当n小于27的时候,是可以直接在A-Z里面取到值的,因为A本身代表1,所以要减去1。

当n大于27的时候,这时需要判断能否被26整除,也就是对26进行取余是否等于0,如果是26的整数倍,最后一位肯定代表的是Z,而前面的数就需要除以26再减1,减1是相当于n除以26的商向前移动一位,直到处理完所有数据,此步骤是递归操作的,因为这部分的数也是符合这三步判断的。如果不能被整除,那么最后一位所代表的就是n对26取余的余数所表示的字母,即余数和字符A的和再减1,因为A本身代表的就是1,而前面部分需要处理的就是n除以26的商再进行递归处理。

public String convertToTitle(int n) {
if (n <= 0) {
return "";
}
if (n < 27) {
return "" + (char) ('A' + n - 1);
} else {
if (n % 26 == 0) {
return convertToTitle(n / 26 - 1) + "Z";
} else {
return convertToTitle(n / 26) + (char) ('A' + n % 26 - 1);
}
}
}

03 第二种解法

此解法我们使用循环来处理数据,如果不使用第一种解法的判断,遇上26或者它的倍数的时候,拿到Z?如果直接用n对26取余,再和字符A相加,是得不到Z的,用n除以26的商更加得不到,这时我们可以想个折中的办法,先把n减1,再去对26取余,然后和字符A相加,因为A本身代表1,就相当于减去的1又补回来了。得到字符串后,此时的n等于n减去1再除以26的商。

public String convertToTitle2(int n) {
String str = "";
while (n != 0) {
int rem = (n - 1) % 26;
str = (char) (rem + 'A') + str;
n = (n - 1) / 26;
}
return str;
}

04 第三种解法

此解法更加丧心病狂,居然只有一行,是讨论区某位大神的杰作,真是佩服,为了可读性,将其改动了下。

public String convertToTitle3(int n) {
if (n == 0) {
return "";
} else {
return convertToTitle3(--n/26) + (char) ('A' + (n % 26));
}
}

05 小结

算法专题目前已连续日更超过一个月,算法题文章39+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Excel Sheet Column Title(Java实现)的更多相关文章

  1. LeetCode算法题-Excel Sheet Column Number(Java实现)

    这是悦乐书的第182次更新,第184篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第41题(顺位题号是171).给定Excel工作表中显示的列标题,返回其对应的列号.例如 ...

  2. 【LeetCode】168. Excel Sheet Column Title 解题报告(Java & Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 迭代 递归 日期 [LeetCode] 题目地址:https: ...

  3. 【LeetCode】168. Excel Sheet Column Title

    题目: Given a positive integer, return its corresponding column title as appear in an Excel sheet. For ...

  4. [算法练习]Excel Sheet Column Title

    题目: Given a positive integer, return its corresponding column title as appear in an Excel sheet. For ...

  5. LeetCode 168. Excel表列名称(Excel Sheet Column Title)

    168. Excel表列名称 168. Excel Sheet Column Title 题目描述 给定一个正整数,返回它在 Excel 表中相对应的列名称. LeetCode168. Excel S ...

  6. 【leetcode】Excel Sheet Column Title & Excel Sheet Column Number

    题目描述: Excel Sheet Column Title Given a positive integer, return its corresponding column title as ap ...

  7. 【leetcode】Excel Sheet Column Title

    Excel Sheet Column Title Given a non-zero positive integer, return its corresponding column title as ...

  8. 【LeetCode】168 & 171- Excel Sheet Column Title & Excel Sheet Column Number

    168 - Excel Sheet Column Title Given a positive integer, return its corresponding column title as ap ...

  9. Leetcode Excel Sheet Column Number (C++) && Excel Sheet Column Title ( Python)

    Given a column title as appear in an Excel sheet, return its corresponding column number. For exampl ...

随机推荐

  1. man mountd(rpc.mountd中文手册)

    本人译作集合:http://www.cnblogs.com/f-ck-need-u/p/7048359.html rpc.mountd() System Manager's Manual rpc.mo ...

  2. spring-cloud-starter-gateway

    ********************************************************** Spring MVC found on classpath, which is i ...

  3. 微信小程序实现支付功能

    小程序支付,没有封装支付代码:直接上一段可用的流程代码吧:微信小程序支付官网文档有详细的说明,这里我就不再赘述啦:客户端js: wx.request({ url:'https://www.xxxx.c ...

  4. python基础学习(七)列表

    列表的定义 List(列表) 是 Python 中使用 最频繁 的数据类型,在其他语言中通常叫做 数组(例如java.c) 专门用于存储 一串 信息 列表用 [] 定义,数据 之间使用 , 分隔 列表 ...

  5. Codeforces Round #309 (Div. 2)

    A. Kyoya and Photobooks Kyoya Ootori is selling photobooks of the Ouran High School Host Club. He ha ...

  6. Yii2基本概念之——行为(Behavior)

    使用行为(behavior)可以在不修改现有类的情况下,对类的功能进行扩充.通过将行为绑定到一个类,可以使得类具有行为本身所具有的属性和方法,就好像是类本来就具有的这些属性和功能一样. 好的代码设计, ...

  7. Javascript删除数组里的某个元素

    删除array数组中的某个元素,首先需要确定需要删除元素的索引值. ? 1 2 3 4 5 6 7 var arr=[1,5,6,12,453,324]; function indexOf(val){ ...

  8. [转]JS学习总结-技巧、方法、细节

    变量转换 var myVar = "3.14159", str = ""+ myVar,// string类型 int = ~~myVar, // number ...

  9. SD Consultant Year End Activities

    SD Consultant Year End Activities What are the year ending activities to be done for SAP SD?   S.No ...

  10. 我写的Angular相关的文章

    此文正在更新中... Angular6的变化 Angular7的变化 No value accessor for form control with path的解决方案