2016/7/12

[LeetCode] Excel Sheet Column Number 表單數字翻譯 (No.171)

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 

Ref: https://leetcode.com/problems/excel-sheet-column-number/


中文簡單說明:
這題其實跟No.168的那題算是類似題,只是一個是從數字翻過來,而這個是從英文字翻過去。一樣要注意的也是類似的點。

解法:
同樣可以用26進制的方法得到解,不過我的解法比較白痴,速度也就沒有那麼快,雖然還不至於TLE,因此我後來也找了一下解決,在CODE裡面有個bestAlgorithm()的就是目前我找到最佳解。

部份程式碼:
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

沒有留言:

張貼留言