一、需求
- 给定一个正整数,返回它在 Excel 表中相对应的列名称。
例如,
1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB
...
示例 1:
输入: 1 输出: "A"示例 2:
输入: 28 输出: "AB"示例 3:
输入: 701 输出: "ZY"
二、进制转换法
2.1 思路分析
- 我们将A~Z类比成16进制中的A~F,那么A~Z表示的就是数字1~26,而题目的意思就是将十进制数转换成A~Z表示的26进制,我们用 来表示26进制的第 i 位,那么有:
- 一般表达式:,此时 的范围是 1~26 ,因此要求 x1,若等式两边对26求余是无法得到x1的,为了解决这个问题,可以将等式两边同时减1,这样就得到,这样x1 - 1的范围就是 0~25,等式两边对26求余即可得到x1,即x1=(n-1) % 26 + 1;
- 同样,为了方便求x2,等式两边同时除26,即可消掉x1,因此x2,x3等的求法即重复2,3;
2.2 代码实现
class Solution {
public String convertToTitle(int n) {
StringBuilder sb = new StringBuilder();
while(n > 0) {
n--;
//这里将'A'看作1
sb.append((char)(n % 26 + 'A'));
n = n / 26;
}
sb.reverse();
return sb.toString();
}
}
2.3 复杂度分析
- 时间复杂度为,将十进制转换成26进制;
- 空间复杂度为O(1),返回值不计入额外空间;
三、学习地址
作者:windliang