Leetcode 168. Excel Sheet Column Title

来源:互联网 发布:萨斯喀彻温大学知乎 编辑:程序博客网 时间:2024/06/06 07:35

Given a positive integer, return its corresponding column title as appear in an Excel sheet.

For example:

1 -> A2 -> B3 -> C...26 -> Z27 -> AA28 -> 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;    }};
0 0