为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在 Leetcode 上以递归方式实现问题 #171?

是否可以在 Leetcode 上以递归方式实现问题 #171?

四季花海 2022-09-27 10:01:46
我正在李特代码上做问题#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]).


查看完整回答
反对 回复 2022-09-27
  • 1 回答
  • 0 关注
  • 95 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信