2023-10-17 15:13阅读: 20评论: 0推荐: 0

力扣-168-Excel 表列名称

华硕科技的面试手写算法题,我没见过,分析出了思路但是没把握写出来能过,于是挂了

string convertToTitle(int columnNumber) {
// 计算会有几位长度
long long temp = 26;
int len = 1;
while (columnNumber > temp) {
len++;
temp *= 27;
}
// 计算每一位上的具体符号
// 从高位向低位计算,比如BS,先计算B,就是在不大于num的情况下,可以被多少个26整除,这里用取模运算,剩下的小于26的余数直接转换为字母
// 如果是 BDS ,同样先计算高位可以被多少个26*26整除(也就是len-1个26的幂),然后是可以被多少个len-2的26幂整除,一直到一个小于26的整数
// 这里最好是单独抽出一个print函数用于打印26以内的数字向字母的转换,当然也可以利用ASC码
string res;
for (int i = len; i > 0; --i) {
int site = columnNumber / pow(26, i-1);
columnNumber -= pow(26, i-1)*site;
res += (char)site + 64;
}
return res;
}

这是我的代码,但是我无法解决 52 的用例 52 对应的是 AZ

题解

题解说这是情况特殊一点的进制转换题而已,在于进制映射中没有 0

string convertToTitle(int columnNumber) {
string columnTitle = "";
while (columnNumber > 0)
{
columnNumber--;
columnTitle += columnNumber % 26 + 'A';
columnNumber /= 26;
}
reverse(columnTitle.begin(),columnTitle.end());
return columnTitle;
}

并没有完全理解这道题

将代码逆向可以得到 171-Excel 表列序号的题解

int titleToNumber(string columnTitle) {
reverse(columnTitle.begin(), columnTitle.end());
long long number = 0;
for (int i = columnTitle.size(); i > 0; i--) {
number *= 26;
number += (columnTitle[i - 1] - 'A') + 1;
}
return number;
}

本文作者:YaosGHC

本文链接:https://www.cnblogs.com/yaocy/p/17769774.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   YaosGHC  阅读(20)  评论(0编辑  收藏  举报
历史上的今天:
2022-10-17 服务器迁移
2022-10-17 =NULL 和 IS NULL 区别
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起