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

我正在李特代码上做问题#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。


四季花海
浏览 97回答 1
1回答

慕的地6264312

我简化并略微修改了递归。myDictclass 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]).
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python