Excel Sheet Column Title
Given a positive integer, return its corresponding column title as appear in an Excel sheet.
For Example:
1 2 3 4 5 6 7
| 1 -> A 2 -> B 3 -> C ... 26 -> Z 27 -> AA 28 -> AB
|
Default:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| func convertToTitle(n int) string { } #### 解答思路: 這題只要能看出規律就沒什麼大問題了,題目自己定義了1~26為A~Z,但是我不想要也跟著去用Map或Array存這些順序關係,所以就直接將這些數字+64也就是變成了65~90,其實就是ASCII的A~Z,如此一來就能省下不少工夫,當然這是最後才要做的,在那之前首先我們能發現到每一位數其實就是該數字除上26的餘數(因為26個字母一循環),而如果商數超過26表示結果的字母會更長些,這時就重複上一步的動作,不斷的將商數除以26去取得結果的餘數(字母由後網前排序),直到商數也小於等於26才大功告成,唯一要注意的是整除的情況,以52來說就是AZ,如果該數字除26後的餘數為0時,這時就直接跟商數借1,因為A~Z為1~26,餘數為0反而不知道要表示哪個字母,也就變成餘數變為26而商數要再-1,這樣就算是整除的狀況也能順利的表示出來了。 #### 程式碼解說: 最主要就是要判斷目前的數字是否超過26,如同上述所說的要對整除的狀況向商數借1,所以變成是餘數26而商數-1,有了餘數之後便直接+64變成ASCII轉成string就成了我們目標的字母,這邊要注意的是每找出新的字母要往前放,畢竟我們是從最後頭的字母開始算起 ```go var result string for n > 26 { if n%26 != 0 { result = string(n%26+64) + result n = n / 26 } else { result = string(26+64) + result n = n/26 - 1 } } return string(n+64) + result
|
完整程式碼:
1 2 3 4 5 6 7 8 9 10 11 12 13
| func convertToTitle(n int) string { var result string for n > 26 { if n%26 != 0 { result = string(n%26+64) + result n = n / 26 } else { result = string(26+64) + result n = n/26 - 1 } } return string(n+64) + result }
|
總結:
透過題目定義的數字來位移成ASCII,好讓我們省下不少功夫,透過觀查我們可以發現excel每一列的字母規則不過就是數字除以26(A~Z為26個字母)的餘數,如果商數超過26表示字母的長度可以更長,就不斷的將商數除以26取得餘數,直到商數也小於等於26,此外如果有整除的情況發生,以1~26表示為A~Z來說,餘數為0時並無法表示任字母,此時商數要-1而餘數就變為26(Z)。