本文共 1152 字,大约阅读时间需要 3 分钟。
百度面试了一道题:
代码也就不是问题了,我当时的思路就是为了解题而解题了,没想到这道题考的是什么。
这道题的意义就是26进制的数,将A~Z的字母换成0~25就是相应的26进制数字,所以给定一个整数n,求这个序列里
的第n个字符串,也就是给出十进制求26进制问题,例如:ABC=A*(10^2)+B*(10^1)+C
相应的代码为:
std::string Convert10To26(int n){ if(n <= 0) return ""; int m = n; int rm = 0; std::string alphaB="ABCDEFGHIJKLMNOPQRSTUVWXYZ"; std::string res; while (m){ rm = (m -1) % 26; m = (m -1) / 26; res.push_back(alphaB[rm]); } std::reverse(res.begin(), res.end()); return res;}
参考:
相似问题有字符串的全排列和组合问题
https://segmentfault.com/a/1190000002710424
http://blog.csdn.net/sjpz0124/article/details/46640761
https://www.jianshu.com/p/f051a4ae6e93
void SwapString(std::string &orgName, int b, int e){ char t = orgName[b]; orgName[b] = orgName[e] ; orgName[e] = t;}void permutation(std::string &orgName,int begin,int end){ if (begin == end ) { std::cout << orgName << std::endl; } else { for (int k = begin; k <= end; k++) { SwapString(orgName, k, begin); permutation(orgName, begin + 1, end); SwapString(orgName, k, begin); } }}