1. Given a nested list of integers represented as a string, implement a parser to deserialize it.
  2.  
  3. Each element is either an integer, or a list -- whose elements may also be integers or other lists.
  4.  
  5. Note: You may assume that the string is well-formed:
  6.  
  7. String is non-empty.
  8. String does not contain white spaces.
  9. String contains only digits 0-9, [, - ,, ].
  10. Example 1:
  11.  
  12. Given s = "324",
  13.  
  14. You should return a NestedInteger object which contains a single integer 324.
  15. Example 2:
  16.  
  17. Given s = "[123,[456,[789]]]",
  18.  
  19. Return a NestedInteger object containing a nested list with 2 elements:
  20.  
  21. 1. An integer containing value 123.
  22. 2. A nested list containing two elements:
  23. i. An integer containing value 456.
  24. ii. A nested list with one element:
  25. a. An integer containing value 789.

有括号这种一般要用stack, stack top 就是当前着眼的那一个NestedInteger, 可以对其添加新的元素。

注意47行判断很关键,顺带处理了 "[]," 括号后面是逗号的情况

  1. /**
  2. * // This is the interface that allows for creating nested lists.
  3. * // You should not implement it, or speculate about its implementation
  4. * public interface NestedInteger {
  5. * // Constructor initializes an empty nested list.
  6. * public NestedInteger();
  7. *
  8. * // Constructor initializes a single integer.
  9. * public NestedInteger(int value);
  10. *
  11. * // @return true if this NestedInteger holds a single integer, rather than a nested list.
  12. * public boolean isInteger();
  13. *
  14. * // @return the single integer that this NestedInteger holds, if it holds a single integer
  15. * // Return null if this NestedInteger holds a nested list
  16. * public Integer getInteger();
  17. *
  18. * // Set this NestedInteger to hold a single integer.
  19. * public void setInteger(int value);
  20. *
  21. * // Set this NestedInteger to hold a nested list and adds a nested integer to it.
  22. * public void add(NestedInteger ni);
  23. *
  24. * // @return the nested list that this NestedInteger holds, if it holds a nested list
  25. * // Return null if this NestedInteger holds a single integer
  26. * public List<NestedInteger> getList();
  27. * }
  28. */
  29. public class Solution {
  30. public NestedInteger deserialize(String s) {
  31. if (!s.startsWith("[")) {
  32. return new NestedInteger(Integer.parseInt(s));
  33. }
  34. NestedInteger res = new NestedInteger();
  35. Stack<NestedInteger> st = new Stack<NestedInteger>();
  36. st.push(res);
  37. int start = 1;
  38. for (int i=1; i<s.length(); i++) {
  39. char c = s.charAt(i);
  40. if (c == '[') {
  41. NestedInteger ni = new NestedInteger();
  42. st.peek().add(ni);
  43. st.push(ni);
  44. start = i+1;
  45. }
  46. else if (c==',' || c==']') {
  47. if (i > start) { // "],"这种情况
  48. int val = Integer.parseInt(s.substring(start, i));
  49. st.peek().add(new NestedInteger(val));
  50. }
  51. start = i+1;
  52. if (c == ']') st.pop();
  53. }
  54. }
  55. return res;
  56. }
  57. }

Leetcode: Mini Parser的更多相关文章

  1. [LeetCode] Mini Parser 迷你解析器

    Given a nested list of integers represented as a string, implement a parser to deserialize it. Each ...

  2. 【LeetCode】385. Mini Parser 解题报告(Python)

    [LeetCode]385. Mini Parser 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/mini-parser/ ...

  3. 385. Mini Parser - LeetCode

    Question 385. Mini Parser Solution 分析:用NI(count,list)来表示NestedInteger,则解析字符串[123,[456,[789]]]过程如下: # ...

  4. 385 Mini Parser 迷你解析器

    Given a nested list of integers represented as a string, implement a parser to deserialize it.Each e ...

  5. [Swift]LeetCode385. 迷你语法分析器 | Mini Parser

    Given a nested list of integers represented as a string, implement a parser to deserialize it. Each ...

  6. 385. Mini Parser

    括号题一般都是stack.. 一开始想的是存入STACK的是SRING,然后POP出括号在构建新的NestedInteger放到另一个里面,但是操作起来费时费力. 后来猛然发现其实可以直接吧Neste ...

  7. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  8. leetcode bugfree note

    463. Island Perimeterhttps://leetcode.com/problems/island-perimeter/就是逐一遍历所有的cell,用分离的cell总的的边数减去重叠的 ...

  9. leetcode & lintcode for bug-free

    刷题备忘录,for bug-free leetcode 396. Rotate Function 题意: Given an array of integers A and let n to be it ...

随机推荐

  1. HttpStatusCodeResult

    HttpStatusCodeResult:让mvc回传特定的http状态代码与消息给客户端,对于一些特殊的http响应,可利用httpStatusCodeResult帮助我们响应适当的状态代码: 1X ...

  2. php7安装

    # 配置参数 ./configure --prefix=/usr/local/php7 \ --with-config-file-path=/usr/local/php7/etc \ --with-m ...

  3. shell常用代码

    grep -lr 'hello' /usr/share/* #在/usr/share目录下查找包含hello的字符串 NOW_DATE=`date "+%Y%m%d%H%M%S"` ...

  4. 【转】UML图中类之间的关系

    原文:http://blog.csdn.net/hguisu/article/details/7609483   类与类图 1) 类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相 ...

  5. [收藏]NET技术+25台服务器怎样支撑世界第54大网站

    .NET技术+25台服务器怎样支撑世界第54大网站   英文原文:StackOverflow Update: 560M Pageviews A Month, 25 Servers, And It's ...

  6. Block的简单使用

    代码块本质上是和其他变量类似.不同的是,代码块存储的数据是一个函数体.使用代码块是,你可以像调用其他标准函数一样,传入参数,并得到返回值. 代码块本质上是变量,只不过它存储的数据是一个函数体,因此名字 ...

  7. 【转】android程序编译过程

    现在很多人想对Android工程的编译和打包进行自动化,比如建立每日构建系统.自动生成发布文件等等.这些都需要我们对Android工程的编译和打包有一个深入的理解,至少要知道它的每一步都做了什么,需要 ...

  8. php--jquery操作全选、批量删除、加减行

  9. 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 ...

  10. JS全局函数parseInt和parseFloat

    1.parsetInt parseInt(string ,radix)解析一个字符串,并返回一个十进制的整数:该方法是将字符串转成十进制整数 console.log(parseInt("01 ...