Python class 递归函数中的变量
Python class variable in recursion function
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]", return "aaabcbc"。
- s = "3[a2[c]]", return "accaccacc"。
- s = "2[abc]3[cd]ef", return "abcabccdcdcdef".
以上解决方案是从作者 bluedawnstar cpp 解决方案翻译而来的 Python 版本。
self.i
在整个递归过程中维护全局状态,是否有更 Pythonic 的方法来维护此类变量而不是使用 self
?
这是一个非常好的方法。
但事实并非如此"global";它仅限于那个 class 实例。如果您有两个 class 实例,每个实例都有自己单独的 self.i
.
副本
您可以使用以下函数代替 class 变量:
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
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]", return "aaabcbc"。
- s = "3[a2[c]]", return "accaccacc"。
- s = "2[abc]3[cd]ef", return "abcabccdcdcdef".
以上解决方案是从作者 bluedawnstar cpp 解决方案翻译而来的 Python 版本。
self.i
在整个递归过程中维护全局状态,是否有更 Pythonic 的方法来维护此类变量而不是使用 self
?
这是一个非常好的方法。
但事实并非如此"global";它仅限于那个 class 实例。如果您有两个 class 实例,每个实例都有自己单独的 self.i
.
您可以使用以下函数代替 class 变量:
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