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;
}
};