LeetCode链接

难度:简单
题目描述:给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。

例如:

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

分析

本题本质上为26进制的转换:因为本题从A开始代表数字1,但Z为止代表数字26,这是一个位置上的元素表示。每当当前位置的元素超过26,也即Z的表示数字时,都会向前进一位,变成AA来表示下一个数字,所以说本题的实质为26进制的转换。

解题

本题的代码为:

class Solution {
        public String convertToTitle(int columnNumber) {
            StringBuilder sb = new StringBuilder();
            while (columnNumber > 0){
                columnNumber--;
                sb.append((char) (columnNumber % 26 + 'A'));
                columnNumber = columnNumber / 26;
            }

            return sb.reverse().toString();
        }
    }

做进制运算需要注意两点:
第一:每一次计算columnNumber % 26的余数为最后进制转换的最终值,但是得出的数是从个位开始向高位计算的,所以最终需要将string 字符串进行转置。
第二:本题A的起始值为1,所以进入循环后需要进行columnNumber--操作。