[LeetCode] Excel Sheet Column Title 求Excel表列名称
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');
}
};
类似题目:
参考资料:
https://leetcode.com/problems/excel-sheet-column-title/
https://leetcode.com/problems/excel-sheet-column-title/discuss/51399/Accepted-Java-solution
LeetCode All in One 题目讲解汇总(持续更新中...)
[LeetCode] Excel Sheet Column Title 求Excel表列名称的更多相关文章
- [LeetCode] 168. Excel Sheet Column Title 求Excel表列名称
Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...
- [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 ...
- [LeetCode] Excel Sheet Column Number 求Excel表列序号
Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, retur ...
- leetcode 168. Excel Sheet Column Title 171 Excel Sheet Column Number
题目 //像10进制一样进行 转换 只是要从0开始记录 class Solution { public: string convertToTitle(int n) { char a; string ...
- LeetCode 168 Excel Sheet Column Title(Excel的列向表标题)
翻译 给定一个正整数,返回它作为出如今Excel表中的正确列向标题. 比如: 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 - ...
- LeetCode 168. Excel Sheet Column Title (Excel 表格列名称)
Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...
- 【easy】168. Excel Sheet Column Title 171. Excel Sheet Column Number
class Solution { public: string convertToTitle(int n) { ) { return ""; } ) / ) + () % + 'A ...
- LeetCode 168. Excel表列名称(Excel Sheet Column Title)
168. Excel表列名称 168. Excel Sheet Column Title 题目描述 给定一个正整数,返回它在 Excel 表中相对应的列名称. LeetCode168. Excel S ...
- 【leetcode】Excel Sheet Column Title & Excel Sheet Column Number
题目描述: Excel Sheet Column Title Given a positive integer, return its corresponding column title as ap ...
随机推荐
- HTTPS那些事(一)HTTPS原理
转载来自:http://www.guokr.com/post/114121/ 谣言粉碎机前些日子发布的<用公共WiFi上网会危害银行账户安全吗?>,文中介绍了在使用HTTPS进行网络加密传 ...
- 想着模仿京东微信首页呢,banner滚动搞定了,写到了一半了
接着上篇 微信小程序-阅读小程序demo写:http://www.cnblogs.com/muyixiaoguang/p/5917986.html 想着模仿京东首页呢,结果也没赶得及写完,轮播图让我搞 ...
- IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习保护API
IdentityServer4 ASP.NET Core的OpenID Connect OAuth 2.0框架学习之保护API. 使用IdentityServer4 来实现使用客户端凭据保护ASP.N ...
- Asp.Net MVC 从数据库生成代码(包括页面)
项目需要,数据库已经设计完成,需要生成相关的数据访问代码和页面. 参考:http://www.tracefact.net/asp-net/aspnetmvc-model-part1.aspx http ...
- 生成Tab键或逗号分隔的CSV
<?php header("Content-type:text/csv;charset=utf-8"); header("Content-Disposition:a ...
- spring四种依赖注入方式
一.Set注入 这是最简单的注入方式,假设有一个SpringAction,类中需要实例化一个SpringDao对象,那么就可以定义一个private的SpringDao成员变量,然后创建SpringD ...
- 图表插件Charts.js的使用
Charts.js的介绍自行百度 首先下载Charts.js,官网:http://chartjs.cn/ charts.js 托管在了github上,下载下来后加解压出src中的文件即可.其中有cha ...
- JavaScript--面向对象--猜拳游戏
//html代码 <!doctype html> <html> <head> <meta charset="UTF-8"> < ...
- Linux 性能监测:工具
一个完整运行的 Linux 系统包括很多子系统(介绍,CPU,Memory,IO,Network,-),监测和评估这些子系统是性能监测的一部分.我们往往需要宏观的看整个系统状态,也需要微观的看每个子系 ...
- 使用WebRTC搭建前端视频聊天室——点对点通信篇
WebRTC给我们带来了浏览器中的视频.音频聊天体验.但个人认为,它最实用的特性莫过于DataChannel——在浏览器之间建立一个点对点的数据通道.在DataChannel之前,浏览器到浏览器的数据 ...