【问题标题】:Python class variable in recursion function [closed]递归函数中的Python类变量[关闭]
【发布时间】:2019-04-17 19:28:53
【问题描述】:
class Solution(object):
    def decode(self, s):
        sub_s = ""
        while self.i < len(s) and s[self.i] != "]":
            if not s[self.i].isdigit():
                sub_s += s[self.i]
                self.i += 1
            else:
                n = 0
                while self.i < len(s) and s[self.i].isdigit():
                    n = n * 10 + int(s[self.i])
                    self.i += 1
                self.i += 1
                seq = self.decode(s)
                self.i += 1
                sub_s += seq * n
        return sub_s

    def decodeString(self, s):
        self.i = 0
        return self.decode(s)

我正在研究leetcode问题394解码字符串问题问题是转换一个字符串。

  • s = "3[a]2[bc]",返回 "aaabcbc"。
  • s = "3[a2[c]]",返回 "accacccacc"。
  • s = "2[abc]3[cd]ef",返回 "abcabccdcdcdef"。

以上解决方案是从作者bluedawnstar cpp解决方案翻译的Python版本。

self.i 在整个递归过程中维护全局状态,是否有更 Pythonic 的方式来维护此类变量,而不是使用 self

【问题讨论】:

    标签: python variables recursion class-variables


    【解决方案1】:

    您可以使用以下函数而不需要类变量:

    def decode(s):
        repeat = output = ''
        index = 0
        while index < len(s):
            char = s[index]
            index += 1
            if char.isdigit():
                repeat += char
            elif char == '[':
                substring, offset = decode(s[index:])
                output += substring * int(repeat)
                index += offset
                repeat = ''
            elif char == ']':
                break
            else:
                output += char
        return output, index
    
    def decodeString(s):
        return decode(s)[0]
    

    这样:

    print(decodeString("3[a]2[bc]"))
    print(decodeString("3[a2[c]]"))
    print(decodeString("2[abc]3[cd]ef"))
    

    输出:

    aaabcbc
    accaccacc
    abcabccdcdcdef
    

    【讨论】:

    • 谢谢,您的解决方案具有更好的可读性
    • 非常好的命令式程序
    【解决方案2】:

    这是一个非常好的方法。

    但这并不是真正的“全球性”;它仅限于该类实例。如果您有两个该类的实例,则每个实例都有自己单独的 self.i 副本。

    【讨论】:

      猜你喜欢
      • 2022-01-15
      • 2010-10-31
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      相关资源
      最近更新 更多