来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/excel-sheet-column-title
题目描述:
给你一个整数 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"
思路:
本质上是一道10进制到26进制的转换题.但是正常26进制取数是[0,25],题目是从1开始[1,26],z =26,也就意味着,z%26== 0,所以当发现余数为0时,我们需要手动的赋值为z.
代码实现:
class Solution {
public String convertToTitle(int cn) {
StringBuilder sb = new StringBuilder();
while (cn > 0) {
int mod = cn % 26;
char cur;
if (mod == 0) {
cur = 'Z';
cn = --cn / 26;
} else {
cur = (char)('A' + (mod - 1));
cn = cn / 26;
}
sb.append(cur);
}
sb.reverse();
return sb.toString();
}
}
bfs广度遍历,时间超时,扩展下思路(ps:最近全是bfs的题,看到题目下意识就写出来了,,,).
class Solution {
String[] arr =
new String[]{"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"};
int num = 0;
public String convertToTitle(int columnNumber) {
num = columnNumber;
if (columnNumber < 27) {
return arr[columnNumber];
}
return bfs();
}
public String bfs() {
int index = 26;
Queue<String> queue = new LinkedList();
for (String str : arr) {
queue.offer(str);
}
while(!queue.isEmpty()) {
String poll = queue.poll();
for (String str : arr) {
String copy = poll + str;
queue.offer(copy);
index++;
if (index == num) return copy;
}
}
return "";
}
}