Related to question Excel Sheet Column Title
Given a column title as appear in an Excel sheet, return its corresponding column number.
For example:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28
中文簡單說明:
這題其實跟No.168的那題算是類似題,只是一個是從數字翻過來,而這個是從英文字翻過去。一樣要注意的也是類似的點。
解法:
同樣可以用26進制的方法得到解,不過我的解法比較白痴,速度也就沒有那麼快,雖然還不至於TLE,因此我後來也找了一下解決,在CODE裡面有個bestAlgorithm()的就是目前我找到最佳解。
部份程式碼:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pulic int titleToNumber(String s) { | |
if (s.isEmpty()) | |
return 0; | |
int rtn = 0; | |
for (int i = s.length() - 1; i >= 0; --i) { | |
char theWord = s.charAt(i); | |
int theNumber = getNumberFrom(theWord); | |
rtn += Math.pow(26d, Double.valueOf("" + reverse(s.length(), i))) | |
* theNumber; | |
} | |
return rtn; | |
} | |
private int getNumberFrom(char theWord) { | |
// 為了要讓Z能夠正確顯示,需要另外做判斷 | |
return ((int) theWord - 64) == 26 ? 26 : (int) theWord - 64; | |
} | |
private int reverse(int length, int i) { | |
return length - 1 - i; | |
} | |
// Ref: https://discuss.leetcode.com/topic/36499/my-2ms-java-solution/2 | |
public int bestAlgorithm(String s) { | |
int result = 0; | |
for (int i = 0; i < s.length(); i++) { | |
result *= 26; | |
result += ((s.charAt(i) - 'A') + 1); | |
} | |
return result; | |
} |
全部程式碼:
https://github.com/jimc1682000/LeetCode/blob/master/src/answer/ExcelSheetColumnNumber.java
沒有留言:
張貼留言