168. Excel表列名称
题目:给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
链接 https://leetcode.cn/problems/excel-sheet-column-title/
个人思路
- 建立一个26字母的字典,循环不断取余,然后在字典中取出相应的字母即可
class Solution:
def convertToTitle(self, columnNumber: int) -> str:
haxi = {}
for i in range(1,26):
haxi[i] = chr(64+i)
haxi[0] = 'Z'
ansList = []
while columnNumber >= 26:
temp = columnNumber % 26
ansList.append(haxi[temp])
columnNumber = columnNumber // 26
if columnNumber:
ansList.append(haxi[columnNumber])
ansList.reverse()
return ''.join(ansList)
这里是有漏洞的,因为当后续columnNumber刚好是26时,会出现columnNumber // 26 = 1,从而多加了一个字母
改进:
class Solution:
def convertToTitle(self, columnNumber: int) -> str:
haxi = {}
# 建立26个字母为值的字典
for i in range(1,26):
haxi[i] = chr(64+i)
haxi[0] = 'Z'
ansList = []
while columnNumber > 26:
temp = columnNumber % 26
ansList.append(haxi[temp])
if temp == 0:
columnNumber = columnNumber - 26
columnNumber = columnNumber // 26
print(columnNumber)
ansList.append(haxi[columnNumber % 26])
ansList.reverse()
return ''.join(ansList)
其他思路
- 思路1
一般性的进制转换题目无须进行额外操作,是因为我们是在「每一位数值范围在 [0,x)」的前提下进行「逢 x 进一」。
但本题需要我们将从 1 开始,因此在执行「进制转换」操作前,我们需要先对 columnNumbercolumnNumber 执行减一操作,从而实现整体偏移。
class Solution:
def convertToTitle(self, columnNumber: int) -> str:
ans = list()
while columnNumber > 0:
a0 = (columnNumber - 1) % 26 + 1
ans.append(chr(a0 - 1 + ord("A")))
columnNumber = (columnNumber - a0) // 26
return "".join(ans[::-1])
class Solution:
def convertToTitle(self, columnNumber: int) -> str:
ans = list()
while columnNumber > 0:
columnNumber -= 1
ans.append(chr(columnNumber % 26 + ord("A")))
columnNumber //= 26
return "".join(ans[::-1])
171. Excel 表列序号
题目:给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。
链接 https://leetcode.cn/problems/excel-sheet-column-number/
个人思路
- 其实就是一个26进制转换为十进制:
先把字符代表的数字储存在字典,循环目标字符串相加
class Solution:
def titleToNumber(self, columnTitle: str) -> int:
capitals = {}
for i in range(1,27):
capitals[chr(65+i-1)] = i
ans = 0
for s in range(1,len(columnTitle)+1):
ans = ans+26**(s-1)*capitals.get(columnTitle[-s])
return ans
也可以直接循环,使用ord()把字符转换为数字
class Solution:
def titleToNumber(self, columnTitle: str) -> int:
number, multiple = 0, 1
for i in range(len(columnTitle) - 1, -1, -1):
k = ord(columnTitle[i]) - ord("A") + 1
number += k * multiple
multiple *= 26
return number
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/excel-sheet-column-title/solution/excelbiao-lie-ming-cheng-by-leetcode-sol-hgj4/