题目地址:
https://www.lintcode.com/problem/excel-sheet-column-title/description
给定一个Excel的列的数目(即它是第几列,从 1 1 1开始),问它对应的列的编号。
可以反过来想。给定一个编号,比如
A
B
AB
AB,那么它的列的数目是((0 * 26) + (A - 'A') + 1) * 26 + (B - 'A') + 1
,这里相当于是已知数目,要把前面不带引号的字母求出来,那方法就是减去
1
1
1,对
26
26
26取余,然后再加上A
,这样就得到了最低位,接着除以
26
26
26,再减去
1
1
1,对
26
26
26取余,然后再加上A
,得到倒数第二低位,如此这样。代码如下:
public class Solution {
/**
* @param n: a integer
* @return: return a string
*/
public String convertToTitle(int n) {
// write your code here
StringBuilder sb = new StringBuilder();
while (n > 0) {
sb.append((char) ((n - 1) % 26 + 'A'));
n = (n - 1) / 26;
}
// 返回之前记得翻转
return sb.reverse().toString();
}
}
时空复杂度 O ( n ) O(n) O(n)。