未分類

Excel Sheet Column Title

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
提示 解題應用
Math 觀查規律

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)。

分享到