【原创】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编辑  收藏  举报

导航