題目:
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