力扣-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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2022-10-17 服务器迁移
2022-10-17 =NULL 和 IS NULL 区别