Given a positive integer, return its corresponding column title as appear in an Excel sheet.
For example:
1 -> A2 -> B3 -> C...26 -> Z27 -> AA28 -> ABs思路: 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; }};新闻热点
疑难解答