【LeetCode】Day3-Excel表列名称

博客探讨了如何将数字转换为Excel表格的列名称,错误地尝试将问题视为26进制数,但正确方法是处理[1,26]范围的数值。文章通过实例分析了错误做法和正确解决方案,重点在于使用`--n`确保转换为真正的26进制数。
摘要由CSDN通过智能技术生成

题目

168. Excel表列名称【简单】

题解

刚开始以为是26进制数,后来发现也不太一样,26进制数是[0,25],而此处的规则是[1,26],所以AB不是 26 ∗ 0 + 1 ∗ 1 26*0+1*1 260+11,而是 26 ∗ 1 + 1 ∗ 1 26*1+1*1 261+11,因此想办法把这个规则转成26进制数,再解决
思路同十进制转二进制:先模再除倒输出

错误做法:

class Solution {
    public String convertToTitle(int columnNumber) {
        int n=columnNumber;
        StringBuffer a=new StringBuffer();//记录模26余数,转字母后倒输出即要求结果
        while(n>0){
            a.append((char)(n%26+64));
            n=n/26;
        }
        return a.reverse().toString();
    }
}

错误原因: 26 % 26 = 0 26\%26=0 26%26=0,本来应该输出Z,结果输出@A

正解:- -n是题解的关键,其目的是将n从[1,26]转换到[0,25],使它真真正正成为26进制数

class Solution {
    public String convertToTitle(int columnNumber) {
        int n=columnNumber;
        StringBuffer a=new StringBuffer();//记录模26余数,转字母后倒输出即要求结果
        while(n>0){
            a.append((char)((--n)%26+'A'));//重点是模除之前n先减一
            n=n/26;
        }
        return a.reverse().toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值