大家好,我是小魔龙,Unity3D软件工程师,VR、AR,虚拟仿真方向,不定时更新软件开发技巧,生活感悟,觉得有用记得一键三连哦。
一、题目
1、算法题目
“给定一个整数,返回它在Excel表中相对应的列名称。”
2、题目描述
给你一个整数 columnNumber
,返回它在 Excel 表中相对应的列名称。
示例 1: 输入: columnNumber = 1 输出: "A"
示例 2: 输入: columnNumber = 28 输出: "AB"
二、解题
1、思路分析
这道题就是根据序号,返回对应的名称。
跟传统的26进制相比,题目所对应的进制数量上多了1,减去1再用传统的26进制表示。
求某个数的26进制表示,可以使用取余运算,取得最后一位,然后进行除法运行,直到某个数为0即可。
然后将这个数字转成的26进制转化为字符串。
2、代码实现
代码参考:
class Solution { public String convertToTitle(int columnNumber) { StringBuffer sb = new StringBuffer(); while (columnNumber > 0) { int a0 = (columnNumber - 1) % 26 + 1; sb.append((char)(a0 - 1 + 'A')); columnNumber = (columnNumber - a0) / 26; } return sb.reverse().toString(); } }
3、时间复杂度
时间复杂度:O(log26 cn)
时间复杂度为cn转换成26进制的位数。
空间复杂度:O(1)
返回值不计入时间复杂度。
三、总结
这道题是求1-27跟A-Z之间的映射:
1、将数据映射到26进制表示的范围 2、将数字以26进制表示 3、将26进制转化为字符串