題目:給定一個欄位的字串,要求出對應到的是第幾欄
Excel欄位命名的規則如下:
A -> 1
B -> 2
C -> 3
...
Z -> 26
AA -> 27
AB -> 28
...
Case 1
Input: columnTitle = "A"
Output: 1
Case 2
Input: columnTitle = "AB"
Output: 28
原因:26*1(A對應到的數字)+2(B對應到的數字)
Case 3
Input: columnTitle = "ZY"
Output: 701
原因:26*26(Z對應到的數字)+25(Y對應到的數字)
解題思路:其實可以視為另一種進制的表示法,1~26分別對應字母A~Z,超過的話就進位
附上程式碼以及註解
Java
class Solution {
public int titleToNumber(String s) {
String dict="ABCDEFGHIJKLMNOPQRSTUVWXYZ";//建立一組字串可以對應26個英文字母
int result=0;//儲存最後結果的變數
int count=0;//紀錄有幾位數
for(int i=s.length()-1;i>=0;i--){//從給定字串的最後一個進行迭代
int index=dict.indexOf(s.charAt(i))+1;
//給定字串在第i個時對應到的數字(程式是從第0個開始因此要+1)
result+=(int)Math.pow(26,count)*index;
count++;
}
return result;
}
}
Python
class Solution:
def titleToNumber(self, columnTitle: str) -> int:
columnTitle=columnTitle[::-1]#反轉字串
s='ABCDEFGHIJKLMNOPQRSTUVWXYZ'#建立一組字串可以對應26個英文字母
result=0#儲存最後結果的變數
count=0#紀錄有幾位數
for c in columnTitle:
result+=(s.index(c)+1)*(pow(26,count))
count+=1
return result