进制转换--十进制转二十六进制(力扣168题)
题目:给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB ...
分析:其实就是一个十进制转换为二十六进制数的问题,只不过是现在需要注意,没有从0开始了,而是从1开始,到26结束,对于1-26以内的数直接利用哈希就可以直接求出来,但是对于大于26的数就需要分开考虑了,即:
1、大于26,但不是26的倍数,那么就利用常规的“/”和“%”运算就可以求出来,模运算负责求出当前位的数,除法运算负责向前进位
2、大于26,但是是26的倍数,那么这个就要慎重考虑,不能直接利用上面的运算了,因为是从1开始而不是从0开始的,并且26有实际对应的字母,所以如果出现了26的倍数,那么就在进行除法运算之后,再对n减一,减一是因为当前的低位可以用Z表示一个26,然后剩余减去这一个26之后的值将在高位进行表示。
代码:
public String convertToTitle(int n) { char[] map = {'Z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'}; if (n <= 26){ return map[n] + ""; } StringBuilder sb = new StringBuilder(); while (n > 0){ char c = map[n%26]; if (n % 26 == 0){ n /= 26; n--; }else { n /= 26; } sb.append(c); } return sb.reverse().toString(); }