LeetCode- Excel表列名称
题目描述
给你一个整数 columnNumber ,返回它在 Excel 表中相对应的列名称。
例如:
示例一:
示例二:
示例三:
示例四:
思路说明
先使用一个字典记录下1-26和A-Z的对应关系,然后将输入的列数依次取余,得到的余数再取对应位置的字母,接下来再取列数除以26的商,若商能继续除以26有余数则继续,直到整除,当商在1-26之间的时候,还要再加上商对应的字母。由以上课看出,是从余数开始逆着向前推导的,由此得到的列序号也是逆序的,最后需要反转字符串。需要主要的是列数输入为52的情况,52/26=2···0,52能整除26,则对应的字母是Z,商是2,表示的是A-Z之后的AA-AZ,所以还要再加上2-1=1所对应的字母。
详见代码。欢迎大家批评指正。
代码实现
class Solution(object):
def convertToTitle(self, columnNumber):
"""
:type columnNumber: int
:rtype: str
"""
zimu_dic = {}
for i in range(0, 26):
zimu_dic[i + 1] = chr(i + ord('A'))
string_index = ''
while columnNumber:
yushu = columnNumber % 26
if yushu != 0:
string_index = string_index + zimu_dic[yushu]
else:
string_index = string_index + zimu_dic[26]
columnNumber = columnNumber // 26
if columnNumber > 1:
string_index = string_index + zimu_dic[columnNumber - 1]
break
columnNumber = columnNumber // 26
string_index = string_index[::-1]
return string_index
补充
- 可以使用//求取两数相除的商、%求取两数相除的余数。如果用/的话,得到的为一个浮点数。
- 使用一个字典记录下1-26和A-Z的对应关系:
zimu_dic = {}
for i in range(0, 26):
zimu_dic[i + 1] = chr(i + ord('A'))
其中,ord()函数将字符转换为整数显示,chr()函数将整数转换为字符显示.
- 字符串反转:
string_index = string_index[::-1],等价于 string_index [-1:-len(string_index )-1:-1],即:从最后一个元素到第一个元素遍历一遍,即可实现字符串反转。
题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/excel-sheet-column-title/