未分類

Excel Sheet Column Number

Excel Sheet Column Number

Related to question Excel Sheet Column Title

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

For example:

1
2
3
4
5
6
7
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
提示 解題應用
Math 觀查規律

Default:

1
2
3
func titleToNumber(s string) int {
}

解答思路:

這題與先前的一篇 Excel Sheet Column Title 有相關。

這次給你字母要你還原回數字,相較於數字要轉字母會有借位的情況,字母轉回數字就沒有特例了,所以可以放心去直接轉換,如果反而會覺得複雜的話,想成是在做26進位制就容易多了,每26個數字就進一位,所以說每一位的字母要還原回數字時就是26的n次方(位數-1)再乘上該數字(字母),一直將每一位的結果總合到最後一位也就是26的0次方為1再乘上該數字(字母)就大功告成了,跟先前一樣因為要定義A~Z為1~26太麻煩,所以最後就直接將字母轉成ASCII再減64以方便處理。

程式碼解說:

在將字母轉成數字時,先從最後一位開始算起,因為26的0次方為1,所以一開始先用tmp做暫存,接著與字母做相乘,我們直接強制轉成ASCII後減64,每往前一個字母就表示進了一位,所以tmp就要多乘上64,最後將每一位的結果做相加後回傳

1
2
3
4
5
6
7
var sum int
tmp := 1
for i := len(s) - 1; i >= 0; i-- {
sum = sum + tmp*(int(s[i])-64)
tmp = tmp * 26
}
return sum

完整程式碼:

1
2
3
4
5
6
7
8
9
func titleToNumber(s string) int {
var sum int
tmp := 1
for i := len(s) - 1; i >= 0; i-- {
sum = sum + tmp*(int(s[i])-64)
tmp = tmp * 26
}
return sum
}

總結:

如果覺得字母轉數字複雜的話,想成是在做26進位制就容易多了,每26個數字就進一位,所以說每一位的字母要還原回數字時就是26的n次方(位數-1)再乘上該數字(字母),一直將每一位的結果總合到最後一位也就是26的0次方為1再乘上該數字(字母)就大功告成了。

分享到