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; }};新聞熱點
疑難解答