- class Solution:
- def decodeString(self, s: str) -> str:
- stack=[]
- res=""
- multi=0
- for i in s:
- if i =='[':
- stack.append([multi,res])
- res,multi="",0
- elif i==']':
- cur_multi,cur_res=stack.pop()
- res=cur_res+cur_multi*res
- elif '0'<=i<='9':
- multi=multi*10+int(i)
- else:
- res+=i
- return res
看似简单实则不然
ai注释版:
class Solution:
def decodeString(self, s: str) -> str:
# 初始化变量
stack = [] # 用于存储[次数,之前的字符串]
res = "" # 当前构建的结果字符串
multi = 0 # 当前的数字(重复次数)
# 遍历字符串的每个字符
for i in s:
if i == '[':
# 遇到左括号,保存当前的倍数和之前的结果
stack.append([multi, res])
# 重置当前结果和倍数
res, multi = "", 0
elif i == ']':
# 遇到右括号,取出之前保存的倍数和字符串
cur_multi, cur_res = stack.pop()
# 组合新的结果:之前的字符串 + 当前字符串重复指定次数
res = cur_res + cur_multi * res
elif '0' <= i <= '9':
# 处理数字,构建多位数字
multi = multi * 10 + int(i)
else:
# 处理字母,直接添加到结果中
res += i
return res
multi = multi * 10 + int(i)详细解释:
- multi * 10:将已有的数字左移一位(相当于乘以10)
- int(i):将当前字符转换为数字
- 两者相加:将新数字添加到正确的位置
- "1" → 1
- "12" → 12
- "123" → 123
- "1234" → 1234