為了加強自己的程式能力,因此開始記錄每天刷leetcode的解法+說明,會用Ruby
、python
和JavaScript
三個語言來解題,今天是第十五天,讓我們開始吧!
題目來源:leetcode
這次的題目蠻有趣的,是給予Excel的欄位將數換為數字,Excel欄位的慣例為:
1 |
|
AZ是126,27是AA,28是AB,依序下去,等於是滿26
後會進位。
這樣來看,其實Excel欄位和26進位蠻像的,轉換需要 / 26後的餘數對應到相應的字母即可(和十進位轉二進位有點像),因為剛好對應的是字母,可以將其轉換為ASCII
碼,在ASCII
裡,A
為065
、B
為066
….依序排序,排序到Z
為090
。
Ruby
1 |
|
column_number -= 1
此方法是利用餘數
先取個位數
的字母,再/26
取得接下來的數字字母,會需要先-1
,這樣1
才能對應到A
result = ('A'.ord + column_number % 26).chr + result
這段的ord
是將字母轉換為ASCII
,因為每個字母都是按照順序排序,所以中間的差數就是'A'.ord
,最後再使用.chr
轉為數字,最後 + result
更新result
的數,並確保下一個result
會放在前面
接著最後再將輸入值/26
來處理下一位數(真的和十進位轉二進位蠻像的~)
Python
1 |
|
Python和Ruby的解法相同,只要改變寫法即可!
JavaScript
1 |
|
JS也和Ruby的解法相同,只要改變寫法即可!
今天就到這裡~明天繼續加油!
Comments