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

For example:

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

Example 1:

Input: 1
Output: "A"

Example 2:

Input: 28
Output: "AB"

Example 3:

Input: 701
Output: "ZY"

Credits:
Special thanks to @ifanchu for adding this problem and creating all test cases.

此题和 Excel Sheet Column Number 是一起的,但是我在这题上花的时间远比上面一道多,其实原理都一样,就是一位一位的求,此题从低位往高位求,每进一位,则把原数缩小26倍,再对26取余,之后减去余数,再缩小26倍,以此类推,可以求出各个位置上的字母。最后只需将整个字符串翻转一下即可。我们先从最简单的来看,对于小于26的数字,那么我们只需要对26取余,然后减去1,加上字符A即可,但是对于26来说,如果还是这么做的话就会出现问题,因为对26取余是0,减去1后成为-1,加上字符A后,并不等于字符Z。所以对于能被26整除的数我们得分开处理,所以就分情况讨论一下吧,能整除26的,直接在结果res上加上字符Z,然后n自减去26;不能的话,就按照一般的处理,n要减去这个余数。之后n要自除以26,继续计算下去,代码如下:

解法一:

class Solution {
public:
string convertToTitle(int n) {
string res = "";
while (n) {
if (n % == ) {
res += 'Z';
n -= ;
} else {
res += n % - + 'A';
n -= n % ;
}
n /= ;
}
reverse(res.begin(), res.end());
return res;
}
};

然后我们可以对上面对方法进行下优化,合并if和else,写的更简洁一些。从上面的讲解中我们得知,会造成这种不便的原因是能被26整除的数字,无法得到字符Z。那么我们用一个小trick,比如对于26来说,我们先让n自减1,变成25,然后再对26取余,得到25,此时再加上字符A,就可以得到字符Z了。叼就叼在这对其他的不能整除26的数也是成立的,完美解决问题,参见代码如下:

解法二:

class Solution {
public:
string convertToTitle(int n) {
string res;
while (n) {
res += --n % + 'A';
n /= ;
}
return string(res.rbegin(), res.rend());
}
};

这道题还可以用递归来解,而且可以丧心病狂的压缩到一行代码来解:

解法三:

class Solution {
public:
string convertToTitle(int n) {
return n == ? "" : convertToTitle(n / ) + (char)(--n % + 'A');
}
};

类似题目:

Excel Sheet Column Number

参考资料:

https://leetcode.com/problems/excel-sheet-column-title/

https://leetcode.com/problems/excel-sheet-column-title/discuss/51399/Accepted-Java-solution

https://leetcode.com/problems/excel-sheet-column-title/discuss/51398/My-1-lines-code-in-Java-C%2B%2B-and-Python

https://leetcode.com/problems/excel-sheet-column-title/discuss/51421/Share-my-simple-solution-just-a-little-trick-to-handle-corner-case-26

LeetCode All in One 题目讲解汇总(持续更新中...)

[LeetCode] Excel Sheet Column Title 求Excel表列名称的更多相关文章

  1. [LeetCode] 168. Excel Sheet Column Title 求Excel表列名称

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

  2. [LeetCode] 171. Excel Sheet Column Number 求Excel表列序号

    Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...

  3. [LeetCode] Excel Sheet Column Number 求Excel表列序号

    Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...

  4. leetcode 168. Excel Sheet Column Title 171 Excel Sheet Column Number

    题目 //像10进制一样进行 转换   只是要从0开始记录 class Solution { public: string convertToTitle(int n) { char a; string ...

  5. LeetCode 168 Excel Sheet Column Title(Excel的列向表标题)

    翻译 给定一个正整数,返回它作为出如今Excel表中的正确列向标题. 比如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 - ...

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

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

  7. 【easy】168. Excel Sheet Column Title 171. Excel Sheet Column Number

    class Solution { public: string convertToTitle(int n) { ) { return ""; } ) / ) + () % + 'A ...

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

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

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

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

随机推荐

  1. CE修改器修改DNF 测试视频 阿修罗提升智力增加攻击力

    使用CE修改器来修改网络游戏,如DNF 测试视频: CE修改器:指的是Cheat Engine,字面上的意思指的是作弊引擎的意思,是一款内存修改编辑工具.通过修改游戏的内存数据来得到一些原本无法实现的 ...

  2. 你真的会玩SQL吗?你所不知道的 数据聚合

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  3. TCP初始化序列号ISN

    TCP初始化序列号ISN TCP初始化序列号不能设置为一个固定值,因为这样容易被攻击者猜出后续序列号,从而遭到攻击. RFC1948中提出了一个较好的初始化序列号ISN随机生成算法. ISN = M ...

  4. IDEA上安装和使用checkstyle,findbugs,visualVM,PMD插件

    ##安装插件步骤: 1.打开settings 2.选择plugins 3.点击"Browse repositories" 4.搜索对应内插件,点击"install&quo ...

  5. C#向sql server数据表添加数据源代码

    HoverTree解决方案 学习C#.NET,Sql Server,WinForm等的解决方案. 本文链接http://hovertree.com/h/bjaf/0jteg8cv.htm 使用的技术. ...

  6. MySQL引擎、索引和优化(li)

    一.存储引擎 存储引擎,MySQL中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术 ...

  7. 两种常用的C语言排序算法

    1. 要求输入10个整数,从大到小排序输出 输入:2 0 3 -4 8 9 5 1 7 6 输出:9 8 7 6 5 3 2 1 0 -4 解决方法:选择排序法 实现代码如下: #include &l ...

  8. 初识Git

    Git是目前世界上最先进的分布式版本控制系统.在Git诞生之前,我们一直使用的是集中式版本控制系统(如CVS.SVN等),那么两者有什么不同呢?分布式的优势又在哪里呢? 分布式vs集中式 集中式版本控 ...

  9. JSPatch来更新已上线的App中出现的BUG(超级详细)

    JSPatch的作用是什么呢? 简单来说:(后面有具体的操作步骤以及在操作过程中会出现的错误) 1.iOS应用程序上架到AppStore需要等待苹果公司的审核,一般审核时间需要1到2周.虽然程序在上架 ...

  10. 了解JavaScript 面向对象基础 & 原型与对象

    面向对象语言中的对象 老是能听到什么基于对象, 面向对象. 什么是对象, 如果有面向对象基础的人可以无视了, 下面举个简单的例子给大家讲讲面向对象中, 对象的定义, 这个是比较通用的, 不过对于JS来 ...