首页 > 代码库 > 【原创】leetCodeOj --- Excel Sheet Column Title 解题报告

【原创】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;    }};

 

【原创】leetCodeOj --- Excel Sheet Column Title 解题报告