LeetCode筆記:171. 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:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28

大意:

與題目Excel Sheet Column Title相關(guān)
給一個像Excel中顯示的列標(biāo)題,返回其對應(yīng)的列數(shù)。
比如說:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28

思路:

首先最簡單的,AZ分別是126。然后AA到AZ是27~(26+26)。AAA到AAZ是2626+1 ~ 2626 + 26。
N位字母,前面位數(shù)的字母對應(yīng)的數(shù)量總和為26(n-1),可以總結(jié)出一個公式來。加上我們當(dāng)前計算一個n位字母的列數(shù),其前面位數(shù)的字母數(shù)量總和為26(n-1),設(shè)其為startCount,從當(dāng)前位數(shù)的字母開始計算,計算方法為:

startCount + ('A' - 65)*26^(n-1) + ('A' - 65)*26^(n-2) + ... + ('A' - 65) + 1

這樣就可以總結(jié)為代碼,分兩步計算,第一步計算前面位數(shù)的字母數(shù)量總和,第二部計算當(dāng)前位數(shù)的數(shù)量:

代碼(Java):

public class Solution {
    public int titleToNumber(String s) {
        int count = 0;
        // 當(dāng)前字母位數(shù)對應(yīng)之前的數(shù)量
        int startCount = 0;
        for (int i = 1; i < s.length(); i++) {
            startCount += Math.pow(26, i);
        }
        
        // 加上前期數(shù)量
        count += startCount;
        count += 1;
        
        // 計算當(dāng)前位數(shù)的數(shù)量:start + ('A' - 65)*26^(n-1) + ('A' - 65)*26^(n-2) + ... + ('A' - 65) + 1
        char[] sCharArr = s.toCharArray();
        for (int i = sCharArr.length - 1, j = 0; i >= 0; i--, j++) {
            count += (sCharArr[j] - 65) * Math.pow(26, i);
        }
        return count;
    }
}

他山之石:

最Hot的一個解決方法,只需要三行代碼,把計算公式進(jìn)行了化簡,得出了一個特別簡單的計算過程:

int result = 0;
for (int i = 0; i < s.length(); result = result * 26 + (s.charAt(i) - 'A' + 1), i++);
return result;

也是把代碼行數(shù)節(jié)約到了極致。


合集:https://github.com/Cloudox/LeetCode-Record


查看作者首頁

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容