持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情
一、题目描述:
给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。
列表中的每个元素只可能是整数或整数嵌套列表
示例 1:
输入:s = "324", 输出:324 解释:你应该返回一个 NestedInteger 对象,其中只包含整数值 324。 示例 2:
输入:s = "[123,[456,[789]]]", 输出:[123,[456,[789]]] 解释:返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表:
- 一个 integer 包含值 123
- 一个包含两个元素的嵌套列表: i. 一个 integer 包含值 456 ii. 一个包含一个元素的嵌套列表 a. 一个 integer 包含值 789
提示:
1 <= s.length <= 5 * 104 s 由数字、方括号 "[]"、负号 '-' 、逗号 ','组成 用例保证 s 是可解析的 NestedInteger 输入中的所有值的范围是 [-106, 106]
二、思路分析:
利用栈 stack 元素添加 append 以及元素删除 pop 和 NestedInteger 的 add 模拟实现,分以下4种情况分析:
- 遇到 -0123456789 将连续的数字字符串取出, 并保留为 num
- 遇到 , 创建数值型的 NestedInteger 实例值为 num 并压入最后的一个嵌套 list 中
- 遇到 [ 创建一个嵌套类型的 NestedInteger list 实例值并压入栈中,并添加数值型的 NestedInteger 实例值为 None
- 遇到 ] 创建数值型的 NestedInteger 实例值为 num 并压入最后一个嵌套 list 中,并从栈中取出当前与 [ 匹配的list NestedInteger 实例
三、AC 代码:
class Solution:
def deserialize(self, s: str) -> NestedInteger:
stack, num, last = [], "", ""
for c in s:
if c in set('-0123456789'):
num += c
elif c == "," and num:
stack[-1].add(NestedInteger(int(num)))
num = ""
elif c == "[":
elem = NestedInteger()
if stack:
stack[-1].add(elem)
stack.append(elem)
elif c == "]":
if num:
stack[-1].add(NestedInteger(int(num)))
num = ""
last = stack.pop()
return last if last else NestedInteger(int(num))
四、总结:
掘友们,解题不易,留下个赞或评论再走吧!谢啦~ 💐
希望对你有帮助
期待下次再见~
🌇 点赞 👍 收藏 ⭐留言 📝 一键三连 ~关注从你我做