1.题目描述
2.知识点
注1:StringBuilder 对象的 insert() 方法用于在字符串的指定位置插入字符或字符序列。这里的第一个参数是插入位置的索引,而第二个参数是要插入的字符或字符序列。
public class InsertExample {public static void main(String[] args) {StringBuilder str = new StringBuilder("Hello, World!");// 在索引为5的位置插入字符 'X'str.insert(5, 'X');System.out.println(str); // 输出:HelloX, World!// 在索引为7的位置插入字符串 "Java"str.insert(7, "Java");System.out.println(str); // 输出:HelloX, JavaWorld!}
}
3.思路和例子
因为A-Z 总共26个字母,所以26个字母为一个循环。
(1)Excel 列名的规则
Excel 列名由字母组成,从 A 开始,一直到 Z,然后是 AA、AB、AC,以此类推。
每一位对应一个 26 进制数,而不是 10 进制数。即,26 个字母代表 26 个数值,每个数值代表一位。
每一位从右到左,数值从 1 到 26。
(2)在计算机科学中,通常使用 0-based 索引,这意味着第一个元素的索引是 0,第二个元素的索引是 1,以此类推。在将数字转换为 Excel 列名的过程中,我们需要将索引方式(从 0 开始)与 Excel 列名方式(从 1 开始)进行转换。这就是为什么在代码中执行 columnNumber–; 操作的原因。通过减去 1,我们将数字的索引方式转换为 Excel 列名的方式,以便正确计算列名。
(3)把他看作是26进制除法,先列数-1,%26取余数 ,/26处理更高位,
然后再将取出的每一位的数字用sb.insert()的方法存起来,就是从右边往左插入字母。
4.代码实现
class Solution {public String convertToTitle(int columnNumber) {StringBuilder sb=new StringBuilder();while(columnNumber>0){columnNumber--;//比如Excel的表格的列是1,但是对应到索引应该是0char mm=(char)('A'+columnNumber%26);sb.insert(0,mm);//每次在索引为0的位置插入mm字符columnNumber=columnNumber/26;//从右往左处理次高位的数字}return sb.toString();}
}