Leetcode: Mini Parser
- 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.
有括号这种一般要用stack, stack top 就是当前着眼的那一个NestedInteger, 可以对其添加新的元素。
注意47行判断很关键,顺带处理了 "[]," 括号后面是逗号的情况
- /**
- * // This is the interface that allows for creating nested lists.
- * // You should not implement it, or speculate about its implementation
- * public interface NestedInteger {
- * // Constructor initializes an empty nested list.
- * public NestedInteger();
- *
- * // Constructor initializes a single integer.
- * public NestedInteger(int value);
- *
- * // @return true if this NestedInteger holds a single integer, rather than a nested list.
- * public boolean isInteger();
- *
- * // @return the single integer that this NestedInteger holds, if it holds a single integer
- * // Return null if this NestedInteger holds a nested list
- * public Integer getInteger();
- *
- * // Set this NestedInteger to hold a single integer.
- * public void setInteger(int value);
- *
- * // Set this NestedInteger to hold a nested list and adds a nested integer to it.
- * public void add(NestedInteger ni);
- *
- * // @return the nested list that this NestedInteger holds, if it holds a nested list
- * // Return null if this NestedInteger holds a single integer
- * public List<NestedInteger> getList();
- * }
- */
- public class Solution {
- public NestedInteger deserialize(String s) {
- if (!s.startsWith("[")) {
- return new NestedInteger(Integer.parseInt(s));
- }
- NestedInteger res = new NestedInteger();
- Stack<NestedInteger> st = new Stack<NestedInteger>();
- st.push(res);
- int start = 1;
- for (int i=1; i<s.length(); i++) {
- char c = s.charAt(i);
- if (c == '[') {
- NestedInteger ni = new NestedInteger();
- st.peek().add(ni);
- st.push(ni);
- start = i+1;
- }
- else if (c==',' || c==']') {
- if (i > start) { // "],"这种情况
- int val = Integer.parseInt(s.substring(start, i));
- st.peek().add(new NestedInteger(val));
- }
- start = i+1;
- if (c == ']') st.pop();
- }
- }
- return res;
- }
- }
Leetcode: Mini Parser的更多相关文章
- [LeetCode] Mini Parser 迷你解析器
Given a nested list of integers represented as a string, implement a parser to deserialize it. Each ...
- 【LeetCode】385. Mini Parser 解题报告(Python)
[LeetCode]385. Mini Parser 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/mini-parser/ ...
- 385. Mini Parser - LeetCode
Question 385. Mini Parser Solution 分析:用NI(count,list)来表示NestedInteger,则解析字符串[123,[456,[789]]]过程如下: # ...
- 385 Mini Parser 迷你解析器
Given a nested list of integers represented as a string, implement a parser to deserialize it.Each e ...
- [Swift]LeetCode385. 迷你语法分析器 | Mini Parser
Given a nested list of integers represented as a string, implement a parser to deserialize it. Each ...
- 385. Mini Parser
括号题一般都是stack.. 一开始想的是存入STACK的是SRING,然后POP出括号在构建新的NestedInteger放到另一个里面,但是操作起来费时费力. 后来猛然发现其实可以直接吧Neste ...
- LeetCode All in One 题目讲解汇总(持续更新中...)
终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...
- leetcode bugfree note
463. Island Perimeterhttps://leetcode.com/problems/island-perimeter/就是逐一遍历所有的cell,用分离的cell总的的边数减去重叠的 ...
- leetcode & lintcode for bug-free
刷题备忘录,for bug-free leetcode 396. Rotate Function 题意: Given an array of integers A and let n to be it ...
随机推荐
- HttpStatusCodeResult
HttpStatusCodeResult:让mvc回传特定的http状态代码与消息给客户端,对于一些特殊的http响应,可利用httpStatusCodeResult帮助我们响应适当的状态代码: 1X ...
- php7安装
# 配置参数 ./configure --prefix=/usr/local/php7 \ --with-config-file-path=/usr/local/php7/etc \ --with-m ...
- shell常用代码
grep -lr 'hello' /usr/share/* #在/usr/share目录下查找包含hello的字符串 NOW_DATE=`date "+%Y%m%d%H%M%S"` ...
- 【转】UML图中类之间的关系
原文:http://blog.csdn.net/hguisu/article/details/7609483 类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相 ...
- [收藏]NET技术+25台服务器怎样支撑世界第54大网站
.NET技术+25台服务器怎样支撑世界第54大网站 英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's ...
- Block的简单使用
代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数,并得到返回值. 代码块本质上是变量,只不过它存储的数据是一个函数体,因此名字 ...
- 【转】android程序编译过程
现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...
- php--jquery操作全选、批量删除、加减行
- ASP.NET Web API与Rest web api(一)
HTTP is not just for serving up web pages. It is also a powerful platform for building APIs that exp ...
- JS全局函数parseInt和parseFloat
1.parsetInt parseInt(string ,radix)解析一个字符串,并返回一个十进制的整数:该方法是将字符串转成十进制整数 console.log(parseInt("01 ...