题目![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/59cd47d9741e5c2da623f59d2421c5e4.png)
方法一:
class Solution:
def decodeString(self, s: str) -> str:
stack, res, multi = [], "", 0
for c in s:
if c == '[':
stack.append([multi, res])
res, multi = "", 0 #这一部分是为了接下来新的res的诞生
elif c == ']':
cur_multi, last_res = stack.pop()
res = last_res + cur_multi * res
elif '0' <= c <= '9':
multi = multi * 10 + int(c)
else:
res += c
return res
运用一个堆栈,也就是列表进行保存,将之前的res保存·为last_res
解法二:递归法
总体思路与辅助栈法一致,不同点在于将 [ 和 ] 分别作为递归的开启与终止条件:
当 s[i] == ‘]’ 时,返回当前括号内记录的 res 字符串与 ] 的索引 i (更新上层递归指针位置);
当 s[i] == ‘[’ 时,开启新一层递归,记录此 […] 内字符串 tmp 和递归后的最新索引 i,并执行 res + multi * tmp 拼接字符串。
遍历完毕后返回 res。
class Solution:
def decodeString(self, s: str) -> str:
def dfs(s, i):
res, multi = "", 0
while i < len(s):
if '0' <= s[i] <= '9':
multi = multi * 10 + int(s[i])
elif s[i] == '[':
i, tmp = dfs(s, i + 1)
res += multi * tmp
multi = 0
elif s[i] == ']':
return i, res
else:
res += s[i]
i += 1
return res
return dfs(s,0)
看不太懂,不太好理解