难度:中等
题目描述:
思路总结:这题因为括号的嵌套,很容易想到用递归或者栈,但是实际写起来是比较复杂的,不好想出,需要多加思考。关键在于,如何保存前面已经生成(栈中没有左括号)的字符串的信息。另外,最后有个小技巧,mul*10的使用,巧妙的按字符读取n位整数。
题解一:
class Solution:
def decodeString(self, s: str) -> str:
#思路:这种类型的题,一种思路是栈,一种思路是递归。
#本解法用的是栈,当遇到[时,我们将数字压入栈中,并开始用cur_str记录中括号里的字母,如遇到],就将之前的数字出栈并与当前的cur_str相乘。
mul, cur_str = 0, ''
stack = []
for c in s:
if c == '[':
stack.append((mul, cur_str))
mul, cur_str = 0, ''
elif c == ']':
n, pre = stack.pop()
cur_str = pre + n * cur_str
elif '0' <= c <= '9':
mul = 10 * mul + int(c)
else: #字母
cur_str += c
return cur_str