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
问题描述:给出一个正整数,计算它对应的Excel列标。
问题分析:题目可以转化为一个十进制转化为二十六进制的计算。但是略有不同,因为计算是从1开始。所有有小细节需要注意,代码如下:注意之处在代码中标识。
public class Solution { public String convertToTitle(int n) { HashMap<Integer, Character> h = new HashMap<Integer, Character>(); h.put(1, 'A'); h.put(2, 'B'); h.put(3, 'C'); h.put(4, 'D'); h.put(5, 'E'); h.put(6, 'F'); h.put(7, 'G'); h.put(8, 'H'); h.put(9, 'I'); h.put(10, 'J'); h.put(11, 'K'); h.put(12, 'L'); h.put(13, 'M'); h.put(14, 'N'); h.put(15, 'O'); h.put(16, 'P'); h.put(17, 'Q'); h.put(18, 'R'); h.put(19, 'S'); h.put(20, 'T'); h.put(21, 'U'); h.put(22, 'V'); h.put(23, 'W'); h.put(24, 'X'); h.put(25, 'Y'); h.put(26, 'Z'); ArrayList<Character> l = new ArrayList<Character>(); while(n>0){ int t = n%26; //余数t的范围只能是在0-25之间,因此如果t为0,说明该位置对应的值为‘Z’,同时高位减一。 n = n/26; if(t==0){ //余数为0,插入‘Z’,高位减一 l.add('Z'); n--; }else{ l.add(h.get(t)); } } char[] c = new char[l.size()]; //反转 for(int i=l.size()-1; i>=0; i--){ c[l.size()-i-1] = l.get(i); } String s = new String(c); return s; } }