1 题目:

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 

2 分析:

本质上相当于把十进制转化为26进制,但是又有一些小区别,如 十进制10有两位,二进制2有两位'10',而26进制26为'Z',只有一位。十进制、二进制都从0开始,而这个是从1开始。

做了半天做不出来,总是有问题,可能数学功底不行吧- -。然后参考了http://blog.csdn.net/u012162613/article/details/42059591,发现是能够整除时,没处理好,整除时,该位直接设为'Z',然后自减一就能满足要求了。

3 代码

    public String convertToTitle(int n){    
        final String letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        final int LETTER_NUMBER = 26;    
        
        StringBuffer sb = new StringBuffer();
        while(n != 0){
            if( n % LETTER_NUMBER == 0){
                // 26的整数倍,直接取'Z',若不减一,则上一位会多一,如26变为AZ,52变为BZ,减一后恰到好处。
                sb.append(letters.charAt(LETTER_NUMBER - 1));
                n--;
            }else {
                sb.append(letters.charAt(n % LETTER_NUMBER - 1));
            }
            n = n / LETTER_NUMBER;
        }    
        return sb.reverse().toString();
    }