这是悦乐书的第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. Perl正则表达式引用

    正则表达式两篇: 基础正则 Perl正则 本文是对Perl正则的一点扩展,主要内容是使用qr//创建正则对象,以及一些其它的技巧. qr//创建正则对象 因为可以在正则模式中使用变量替换,所以我们可以 ...

  2. ES6 使用数据类型Set求交集、并集、差集

    前言 ES6新增了数据类型Set,它是一种类似数组的数据结构.但它和数组的不同之处在于它的成员都是唯一的,也就是说可以用来去除数组重复成员. Set本身是一个构造函数用来生成Set数据结构. cons ...

  3. git常用命令总结(资源来自廖雪峰)

    自己把命令弄出来方便以后看看,,应该有错的emmmm 原文地址:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67 ...

  4. Jquery ajax, Axios, Fetch区别之我见(转载)

    来源:https://segmentfault.com/a/1190000012836882 引言 前端技术真是一个发展飞快的领域,我三年前入职的时候只有原生XHR和Jquery ajax,我们还曾被 ...

  5. [angularjs] angularjs系列笔记(七)HTML DOM

    AngularJs为HTML DOM元素的属性提供了绑定数据的指令 ng-disabled指令 ng-disabled指令直接绑定数据到HTML元素的disabled属性 ng-show指令 ng-s ...

  6. python多任务-线程

    目录 多任务的概念 线程基础 单线程执行 多线程执行 主线程会等待所有子线程结束后才结束 查看线程数量 线程-注意点 线程执行代码的封装 线程的执行顺序 总结 多任务的概念 什么叫"多任务& ...

  7. python网络编程-udp

    目录 1. 创建socket 2. udp网络程序-发送数据 3. udp网络程序-接收数据 4. python3中的编码转换 5. udp端口绑定 1. 创建socket 在 Python 中 使用 ...

  8. 安装PyCharm

    安装包下载 本文以CentOS上PyCharm安装为例来介绍,安装包的下载地址:https://www.jetbrains.com/pycharm/download/ 官网提供了windows,mac ...

  9. software testing

    Software Testing Software testing is the process of evaluation a software item to detect differences ...

  10. CDRAF之Service mesh

    最近翻看一些网上的文章,偶然发现我们的CDRAF其实就是Service mesh的C++版本.不管从架构的理念上,或者功能的支持上面,基本完全符合.发几个简单的文章链接,等有时间的时候,再来详细描述. ...