题目在这:https://leetcode-cn.com/problems/excel-sheet-column-number/
思路分析:
这是一道类似于 24进制转换的题。
假如只有一位数, :
比如是 C。则 C所对应十进制数字计算方法:ord(C) - 64)
ord() 将一个数转为acsii码。
A为65 则 C为67。67-64 = 3 所以C代表十进制里的3.
假如有两位数:
比如 BC 。一直往后增加。。。。。 BX,BY,BZ,CA
看到了吗。第二位加到Z之后,往前进一位,使第一位的B变成了C。
也就是说,第一位和A差了几个,就代表第二位有多少次从A加到了Z
假如有三位数 :
比如BCF。一直往后增加。。。。。BCX,BCY,BCZ,BDA。。。。。。。BZX,BZY,BZZ,CAA
看到了吗,第三位走过A-Z使得第二位往后走一位。第二位再走过A-Z使第一位往后一位。
也就是说。如果第一位走过了A-Z,代表着 ,第二位走过了 26次A-Z。代表着,第三位走过了 26*26次的A-Z。依次类推。。。。
综上,推得如下公式: (当前位数所代表的的十进制数字)
26 ** (n - index - 1) * (ord(val) - 64)
完整代码:
class Solution:
def titleToNumber(self, columnTitle: str) -> int:
str = columnTitle
n = len(str)
res = 0
for index,val in enumerate(str):
res += 26 ** (n - index - 1) * (ord(val) - 64)
print(res)
return res