leetcode:168. Excel表列名称
题目
给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
例如:
A -> 1B -> 2C -> 3...Z -> 26AA -> 27AB -> 28...
示例:
输入:columnNumber = 1输出:"A"
输入:columnNumber = 28输出:"AB"
输入:columnNumber = 701输出:"ZY"
输入:columnNumber = 2147483647输出:"FXSHRXW"
解答 & 代码
其实就类似于十进制数 num 取每一位的值:
- 从最低位开始取,每一位等于 num % 10,然后令 num = num / 10,接着循环取下一位(更高的一位)
- 最终将位次逆序,就得到了高位到低位的每一位
而这里的区别就两点:
- 这里是 26 进制,因此取每一位是 num % 26,然后令 num = num / 26
- 这里 26 进制的范围是 1~26,而不是 0~25,因此每一位应该是
(**num - 1**) % 26 + 'A'
复杂度分析:设整数 nclass Solution {public:string convertToTitle(int columnNumber) {string result = ""; // 结果字符串// 将数字转换为 26 进制,从右往左(从低位到高位)得到每一位while(columnNumber > 0){// 注意这里要先将数值 -1!!!,因为这类 26 进制是 1~26,而不是 0~25--columnNumber;result += columnNumber % 26 + 'A'; // 取余得到当前位columnNumber /= 26; // 除 26}// 将结果逆序reverse(result.begin(), result.end());return result;}};
- 时间复杂度
:
- 空间复杂度 O(1):结果字符串不计入
执行结果:
执行结果:通过执行用时:0 ms, 在所有 C++ 提交中击败了 100.00% 的用户内存消耗:5.7 MB, 在所有 C++ 提交中击败了 75.33% 的用户
