168. Excel表列名称
作者:互联网
2021-06-29 LeetCode每日一题
链接:https://leetcode-cn.com/problems/excel-sheet-column-title/
标签:数学、字符串
题目
给你一个整数 columnNumber
,返回它在 Excel 表中相对应的列名称。
例如:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
输入:columnNumber = 1
输出:"A"
输入:columnNumber = 28
输出:"AB"
输入:columnNumber = 701
输出:"ZY"
输入:columnNumber = 2147483647
输出:"FXSHRXW"
提示:
1 <= columnNumber <= 231 - 1
题目
这题难点在于找出规律,A - Z分别表示1 - 26, AA表示27,AB表示28,最后你会发现AB -> (B * (26 ^ 0)) + (A * (26 ^ 1)) = 28,其实就是一个26进制数。所以问题就转换为10进制转为26进制,但又和一般得进制转换不一样,因为这里是从1开始的,26结束。
像二进制,范围是[0, 1],八进制范围是[0, 7],16进制范围是[0. 15],这里的26进制范围却是[1, 26]。如果按照一般的进制转换方法去做,对于一些用例是会出错的。所以我们在每次循环的时候,先把该数减1即可。
编码
class Solution {
/**
* FXSHRXW
* (W * (26 ^ 0)) + (X * (26 ^ 1)) + (R * (26 ^ 2)) + (H * (26 ^ 3)) + (S * (26 ^ 4)) + (X * (26 ^ 5)) + (F * (26 ^ 6))
* 十进制转26进制
*/
public String convertToTitle(int columnNumber) {
char[] letters = {'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'};
StringBuilder sb = new StringBuilder();
while (columnNumber > 0) {
columnNumber--;
int remainder = columnNumber % 26;
sb.append(letters[remainder]);
columnNumber /= 26;
}
return sb.reverse().toString();
}
}
标签:columnNumber,26,AB,进制,28,Excel,表列,168,sb 来源: https://blog.csdn.net/a_helloword/article/details/118344377