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(); }