【原创】leetCodeOj --- Excel Sheet Column Title 解题报告
题目地址:
https://oj.leetcode.com/problems/excel-sheet-column-title/
题目内容:
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
思路:
乍看一下非常麻烦,不妨从反面入手:知道字母组合,如何求是第几个。
这就比较简单了。
A B
1 * 26 + 2 = 28
A A Z
1 * 26 * 26 + 1 * 26 + 26 = 728
有点像27进制,但有有决定性的不同:这里没有数字0。因此,直接类比为27进制的话,没有0可供参考;如果类比为26进制的话,实际上26又没有进,还是Z。
其实我们可以参考数制转换的算法,每轮求一次最低位。问题的关键在于如何求最低位。
先对26求模,如果为0就是z,其余和A到Y一一对应,即A=1,B=2...Y=25。
其次,【要减去最低位后再做除法】。因为这并不是真正的26进制,所以,如果最低位是Z的话,直接做除法并不能完全删除Z,还留下了个1。因此,当最低位是Z时,我们要减去26以后,再做除法来消除此低位的权重。
全部代码:
class Solution { public: string convertToTitle(int n) { char res[101]; char *dic = "ZABCDEFGHIJKLMNOPQRSTUVWXY"; int start = 100; string tar; while (n > 0) { if (n % 26 == 0) { res[-- start] = 'Z'; n -= 26; } else { res[-- start] = dic[n % 26]; n -= n % 26; } n /= 26; } res[100] = '\0'; tar = res + start; return tar; } };
posted on 2014-12-27 02:16 shadowmydx'sLab 阅读(178) 评论(0) 编辑 收藏 举报