leetcode刷题日记:168. Excel Sheet Column Title(Excel表列名称)

文章讨论了如何将数字按照字符集(如9进制和26进制)进行转换,提供了基于字符集的数字表示方法,并给出了相应的C语言代码示例。

我不知道你看到这一道题目有什么感觉,我先告诉你我有什么感觉,在此之前我再给你写一组有相同模式的数字。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

你先告诉我你有什么感觉,有没有感觉,没有感觉的话,那我们就来更深的了解一下:
我们分析最后一个,因为这些模式都是一样的。
可以看出
在这里插入图片描述
这一组数字中字符集为{1,2,3,4,5,6,7,8,9}\{1, 2, 3, 4, 5, 6, 7, 8, 9\}{1,2,3,4,5,6,7,8,9}
我们将字符集换成{0,1,2,3,4,5,6,7,8}\{0, 1, 2, 3, 4, 5, 6, 7, 8\}{0,1,2,3,4,5,6,7,8}则上图可以转化为:
在这里插入图片描述
我们再将->右边的值统一减1看看变成什么:
在这里插入图片描述
现在你有没有感觉,这是什么?是不是9进制,也就是说这一组中字符集为{1,2,3,4,5,6,7,8,9}\{1, 2, 3, 4, 5, 6, 7, 8, 9\}{1,2,3,4,5,6,7,8,9}构造出来的数字等价于9进制系统。
同理我们也可以分析得到由字符集{A,B,C......Z}\{A,B,C......Z\}{A,B,C......Z}构造出来的系统等价于26进制系统。如此一来就转化为了如何将数字按照进制数字转化得到每一位了。
根据上面的思路,我们可以写出下述代码:

char* convertToTitle(int columnNumber) {
    char * answer = (char *)malloc(sizeof(char)*20);
    int length = 0;
    while((columnNumber!=0)){
        columnNumber -= 1; //是为了从0开始进行对应.
        answer[length] = columnNumber%26+'A';
        length ++;
        columnNumber/=26;
    }
    if(!length){
        answer[length++] = 'A';
    }
    answer[length] = '\0';
    for(int i=0; i<length/2;i++){
        char t = answer[i];
        answer[i] = answer[length-i-1];
        answer[length-i-1] = t;
    }
    return answer;
}

运行结果截图:
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值