1.题目

给定一个正整数,返回它在 Excel 表中相对应的列名称。

例如:

  1. 1 -> A
  2. 2 -> B
  3. 3 -> C
  4. ...
  5. 26 -> Z
  6. 27 -> AA
  7. 28 -> AB
  8. ...

示例:

  1. 输入: 1
  2. 输出: "A"
  3. 输入: 28
  4. 输出: "AB"
  5. 输入: 701
  6. 输出: "ZY"

2.思路

该题考察的是进制转换问题,十进制转为二十六进制:

    public static String convertToTitle(int n) {
        StringBuilder stringBuilder = new StringBuilder();
        while (n != 0) {
            n--; // 依次获取 26 进制逻辑上的个位、十位、百位…(虽然在 26 进制中不这么叫)
            stringBuilder.append((char) ('A' + n % 26));
            n /= 26;
        }
        return stringBuilder.reverse().toString();
    }

思路就是通过除留余数法:

通过【除留余数法】将数字 486 由 10 进制转换为 2 进制

168. Excel表列名称 - 图1

2 的 9 次幂大于 486 循环结束
可拆解出 2 进制数 逻辑上的 个位、十位、百位…,再反向罗列得到 111100110

同理,本题是通过【除留余数法】将数字 486 由 10 进制转换为 26 进制

10 进制包括数字:0~9
2 进制包括:0、1
26 进制应包括:0~25
通过【除留余数法】将 10 进制转换为 10 进制时,可逐个获取到个位、十位、百位…,同理:

通过【除留余数法】将 10 进制转换为 26 进制时,也可逐个获取到 26 进制 逻辑上的 个位、十位、百位…

因为 Excel 取值范围为 1~26,故可将 26 进制 逻辑上的 个位、十位、百位…均减 1 映射到 0~25 即可,最后转换为字符

解题思路来源:https://leetcode-cn.com/problems/excel-sheet-column-title/solution/guan-yu-n-de-li-jie-by-douya0808/