题目描述:
给你一个整数columnNumber,返回它在 Excel 表中相对应的列名称。
例如:
A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ...
算法很简单:
class Solution:
def convertToTitle(self, columnNumber: int) -> str:
result = ""
while(columnNumber>0):
columnNumber -= 1 # 调整为从0开始
bit=columnNumber%26
result = result + chr(65+bit)
if columnNumber<26:
break
columnNumber-=bit
columnNumber=columnNumber//26
return result[::-1]
总结一下设计算法时需要注意的3个点:
一、python里两种除法运算符的区别:
1.“/”运算符:/
运算符执行普通的浮点除法操作,返回一个浮点数结果。即使被除数和除数都是整数,结果也将是一个浮点数。
2.“//”运算符://
运算符执行整数除法(也叫地板除法),返回商的整数部分。
a = 7
b = 6
c = 3
print(a/c,b/c) # 结果为2.333... 2.0
print(b/a) # 0.857...
print(a//c,b//c) # 结果为2 2
print(b//a) # 结果为0
在这里我们选择整数乘法,因为我们不仅仅要取到26进制下columnNumber各位上的数,还要在取到了之后将其转换为大写字母,方法是用ASCII码转换为对应的字符,比如说某位上的数字是2,它对应的数字是B,而A的ASCII码为66,因此使用类型转换chr(65+1)即可。这个1是我们刚刚用取模操作得到2减去1的,如果我们选择/”运算符,那么参加取模操作的数中会有浮点数,导致计算出来的值是浮点数1.0,而整数65与浮点数1.0相加会变成浮点数66.0,不满足类型转换的要求。
二、下面这行代码的作用是什么?
columnNumber -= 1 # 调整为从0开始
这段代码很巧妙,它实现将列号调整为从 0 开始计数。在 Excel 表格中,列号从 1 开始,但在计算机编程中,通常使用从 0 开始的索引。
这道题中,Excel 列标题的表示采用了一种类似于进制转换的方式,从低位到高位不断地取余数,将余数映射为对应的大写字母。因为在计算中使用了余数,所以将 columnNumber
调整为从 0 开始,使得余数的范围变为 0 到 25,对应着大写字母 'A' 到 'Z'。
三、复习一些关于字符串的操作
1.字符串连接
x+y # 连接x+y两个字符(串)
2.字符串复制
x*n # n是一个整数,表示将字符(串)x复制n次
3.字符串索引
str[i] #开头从0开始,结尾从-1开始
4.字符串切片
str[N:M] # 返回字符串str中索引第N到第M的子串,不包括M
5.字符串反转
str[::-1]