力扣168(java)-Excel表列名称(简单)
题目:
给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
示例 1:
输入:columnNumber = 1
输出:"A"
示例 2:
输入:columnNumber = 28
输出:"AB"
示例 3:
输入:columnNumber = 701
输出:"ZY"
示例 4:
输入:columnNumber = 2147483647
输出:"FXSHRXW"
提示:
- 1 <= columnNumber <= 231 - 1
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/excel-sheet-column-title
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
类比进制转换中的【除留余数法】
十进制的余数:0~9
二进制的余数:0、1
二十六进制的余数:0~25
已知A~Z的映射值为1~26,需要将其映射到0~25,故需要将每一位映射值减1即可。
例如:
columnNumber = 701
第一轮:
columnNumber - 1== 700; columnNumber % 26 == 24; (char)('A' + columnNumber % 26) == (char) (65 +24 ); ==> Y
sb.append(Y); columnNumber /26 == 26;
第二轮:
columnNumber - 1== 25; columnNumber % 26 == 25; (char)('A' + columnNumber % 26) == (char) (65 +25 ); ==> Z
sb.append(Z) columnNumber /26 == 0;
columnNumber == 0 结束循环,结果为 YZ,返回结果就是 ZY。
代码:
1 class Solution { 2 public String convertToTitle(int columnNumber) { 3 StringBuilder sb = new StringBuilder(); 4 while( columnNumber != 0){ 5 columnNumber--; 6 sb.append((char)('A' + columnNumber % 26)); 7 columnNumber /= 26; 8 } 9 return sb.reverse().toString(); 10 } 11 }