我正在李特代码上做问题#171“Excel工作表列号”。我能想到的唯一方法就是递归地做。这是我在Python中的尝试:class Solution: def titleToNumber(self, s) -> int: myDict = { 'A': 1, 'B': 2, 'C': 3, 'D': 4, 'E': 5, 'F': 6, 'G': 7, 'H': 8, 'I': 9, 'J': 10, 'K': 11, 'L': 12, 'M': 13, 'N': 14, 'O': 15, 'P': 16, 'Q': 17, 'R': 18, 'S': 19, 'T': 20, 'U': 21, 'V': 22, 'W': 23, 'X': 24, 'Y': 25, 'Z': 26, } if len(s) == 1: return myDict[s] else: return myDict[s[0:1]] * 26 + self.titleToNumber(s[1:])我遇到的问题是,在第二次递归调用函数本身之后,如果没有第一个字母,我就无法获得str。
1 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
我简化并略微修改了递归。myDict
class Solution:
def titleToNumber(self, s) -> int:
my_map = lambda x: ord(x) - ord('A') + 1
char = s[-1]
s = s[:-1]
if not s:
# s originally was a single-character
return my_map(char)
else:
return 26 * self.titleToNumber(s) + my_map(char)
比如说,我们要转换为数字。这意味着我们有 2 个以上的 26 列,即 .现在,让我们转换为整数。如果我们分开,我们需要在乘以26时转换为数字。然后,我添加 的值。我得到递归公式:ABmy_map('A') * 26 + my_map('B')ABCCABCtitleToNumber(s) = 26 * titleToNumber(s[:-1]) + my_map(s[-1]).
添加回答
举报
0/150
提交
取消