385. Mini Parser
来源:互联网 发布:华师在线网络教育怎么 编辑:程序博客网 时间:2024/05/22 05:15
Given a nested list of integers represented as a string, implement a parser to deserialize it.
Each element is either an integer, or a list -- whose elements may also be integers or other lists.
Note: You may assume that the string is well-formed:
- String is non-empty.
- String does not contain white spaces.
- String contains only digits 0-9, [, - ,, ].
Example 1:
Given s = "324",
You should return a NestedInteger object which contains a single integer 324.
Example 2:
Given s = "[123,[456,[789]]]",
Return a NestedInteger object containing a nested list with 2 elements:
1. An integer containing value 123.
2. A nested list containing two elements:
i. An integer containing value 456.
ii. A nested list with one element:
a. An integer containing value 789.
自己本来是用循环写的 结果陷入处理各种edge case的泥潭
类似匹配括号的这种题 还是用stack吧
以下是discuss中vote最高
This approach will just iterate through every char in the string (no recursion).
- If encounters '[', push current NestedInteger to stack and start a new one.
- If encounters ']', end current NestedInteger and pop a NestedInteger from stack to continue.
- If encounters ',', append a new number to curr NestedInteger, if this comma is not right after a brackets.
- Update index l and r, where l shall point to the start of a integer substring, while r shall points to the end+1 of substring.
public NestedInteger deserialize(String s) { if (s.isEmpty()) return null; if (s.charAt(0) != '[') // ERROR: special case return new NestedInteger(Integer.valueOf(s)); Stack<NestedInteger> stack = new Stack<>(); NestedInteger curr = null; int l = 0; // l shall point to the start of a number substring; // r shall point to the end+1 of a number substring for (int r = 0; r < s.length(); r++) { char ch = s.charAt(r); if (ch == '[') { if (curr != null) { stack.push(curr); } curr = new NestedInteger(); l = r+1; } else if (ch == ']') { String num = s.substring(l, r); if (!num.isEmpty()) curr.add(new NestedInteger(Integer.valueOf(num))); if (!stack.isEmpty()) { NestedInteger pop = stack.pop(); pop.add(curr); curr = pop; } l = r+1; } else if (ch == ',') { if (s.charAt(r-1) != ']') { String num = s.substring(l, r); curr.add(new NestedInteger(Integer.valueOf(num))); } l = r+1; } } return curr;}
阅读全文
0 0
- Leetcode 385. Mini Parser
- [leetcode] 385. Mini Parser
- LeetCode:385. Mini Parser
- Leetcode 385. Mini Parser
- 385. Mini Parser
- Leetcode 385. Mini Parser
- 385. Mini Parser
- 385. Mini Parser
- Leetcode 385. Mini Parser
- 385. Mini Parser
- 385. Mini Parser
- [LeetCode]385. Mini Parser
- 385. Mini Parser**
- 385. Mini Parser
- 385. Mini Parser
- [leetcode]385. Mini Parser
- leecode-385. Mini Parser
- leetcode 385. Mini Parser
- Java基础(集合卷)--单列集合老大Collection
- unity shader学习笔记(八)——Unity中的透明效果之透明测试
- URL格式
- IntelliJ Idea 工具栏不显示前进返回键
- 下载anaconda遇到failed to create munes解决办法
- 385. Mini Parser
- POJ 3494(超时,和没超时的程序测试过,只差10%的速度,应该可以过的,不知道为什么过不了)
- Java基础--Collection方法
- php函数var_dump() 、print_r()、echo()
- 简图记录-ARM嵌入式基础(概念、工作模式、寄存器、寻址)
- 对数组的简单总结
- 关于springMVC中@ModelAttribute注解的隐含model属性名
- Threadlocal
- hdu1171 Big Event in HDU