Leetcode 168. Excel Sheet Column Title

本文介绍了一种将正整数转换为Excel工作表中相应列标题的方法,通过将十进制数字转换为26进制,并利用数学公式简化代码实现。文章提供了两种实现方式的对比,强调了使用数学公式代替条件判断的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Given a positive integer, return its corresponding column title as appear in an Excel sheet.

For example:

1 -> A
2 -> B
3 -> C
...
26 -> Z
27 -> AA
28 -> AB 

s思路:
1. 把10进制转换26进制。
2. 这种一一映射,找出背后的数学公式(n-1)%26+’A’。因为:n%26,当n=26,余数就是0,而0是没定义的,所以先减1,然后去余数,再加1,就妥了!
3. 有时候,发现判断太多,导致没有美感,让人厌烦,一般是自己打开的方式不对,这里的启发是:把这些多余的if-else**压缩**成一个简洁完美的数学公式即可!果然,数学才是王道,一切现象从数学里出,数学是一切现象之母呀!
4. 由于对26取余的输出是[0,25],而我们希望的结果是[1,26],因此值域差1.那就先减1,运算后在[0,25]内,然后加1,就得到[1,26]结果。我以前就认为这是一个trick,没认识到这背后数学的应用可以起到简化代码,让程序有美感!

//罗嗦的做法:不推荐
class Solution {
public:
    string convertToTitle(int n) {
        //
        string res;
        string table="0ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        while(n){
            if(n%26){//bug
                res=table[n%26]+res;
                n/=26;
            }
            else{
                res=table[26]+res;
                n=n/26-1;
            } 

        }
        return res;
    }
};


//优化:不用列举所有格式,直接计算+'A'即可。
//用数学代替判断,推荐!!!
class Solution {
public:
    string convertToTitle(int n) {
        //
        string res;
        while(n){
            res=char((n-1)%26+'A')+res;
            n=(n-1)/26;
        }
        return res;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值