原文链接: https://leetcode-cn.com/problems/excel-sheet-column-title
英文原文
Given an integer columnNumber
, return its corresponding column title as it appears in an Excel sheet.
For example:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...
Example 1:
Input: columnNumber = 1 Output: "A"
Example 2:
Input: columnNumber = 28 Output: "AB"
Example 3:
Input: columnNumber = 701 Output: "ZY"
Example 4:
Input: columnNumber = 2147483647 Output: "FXSHRXW"
Constraints:
1 <= columnNumber <= 231 - 1
中文题目
给你一个整数 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"
提示:
1 <= columnNumber <= 231 - 1
通过代码
高赞题解
模拟
这是一道从 $1$ 开始的的 $26$ 进制转换题。
对于一般性的进制转换题目,只需要不断地对 $columnNumber$ 进行 %
运算取得最后一位,然后对 $columnNumber$ 进行 /
运算,将已经取得的位数去掉,直到 $columnNumber$ 为 $0$ 即可。
一般性的进制转换题目无须进行额外操作,是因为我们是在「每一位数值范围在 $[0,x)$」的前提下进行「逢 $x$ 进一」。
但本题需要我们将从 $1$ 开始,因此在执行「进制转换」操作前,我们需要先对 $columnNumber$ 执行减一操作,从而实现整体偏移。
代码:
class Solution {
public String convertToTitle(int cn) {
StringBuilder sb = new StringBuilder();
while (cn > 0) {
cn--;
sb.append((char)(cn % 26 + 'A'));
cn /= 26;
}
sb.reverse();
return sb.toString();
}
}
- 时间复杂度:$O(\log_{26}{cn})$
- 空间复杂度:不算构造答案所消耗的空间,复杂度为 $O(1)$
统计信息
通过次数 | 提交次数 | AC比率 |
---|---|---|
89042 | 205406 | 43.3% |
提交历史
提交时间 | 提交结果 | 执行时间 | 内存消耗 | 语言 |
---|
相似题目
题目 | 难度 |
---|---|
Excel 表列序号 | 简单 |