zoukankan      html  css  js  c++  java
  • LeetCode Mini Parser

    原题链接在这里:https://leetcode.com/problems/mini-parser/description/

    题目:

    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.

    题解:

    遇到'[', 说明要往下走一层. 把current NestedInteger push进stack, 创建个新的.

    遇到']', 说明本层走完, 要往上走一层. pop出上层NestedInteger, 吧current NestedInteger 加到 上层NestedInteger里.

    遇到",", 如果前面不是"]", 说明是当前层NestedInteger加上个Integer.

    l 是一段数字开始的index. r是一段数字结束的index+1.

    如果开始就不是"[", 特例说明这就是一个单层的数.

    Time Complexity: O(s.length()).

    Space: O(s.length()). stack space.

    AC Java:

     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 class Solution {
    30     public NestedInteger deserialize(String s) {
    31         if(s.charAt(0) != '['){
    32             return new NestedInteger(Integer.valueOf(s));
    33         }
    34         
    35         NestedInteger cur = null;
    36         Stack<NestedInteger> stk = new Stack<NestedInteger>();
    37         
    38         int l = 0;
    39         for(int r = 0; r<s.length(); r++){
    40             char c = s.charAt(r);
    41             if(c == '['){
    42                 if(cur != null){
    43                     stk.push(cur);
    44                 }
    45                 cur = new NestedInteger();
    46                 l = r+1;
    47             }else if(c == ']'){
    48                 String num = s.substring(l, r);
    49                 if(num.length() != 0){
    50                     cur.add(new NestedInteger(Integer.valueOf(num)));
    51                 }
    52                 if(!stk.isEmpty()){
    53                     NestedInteger top = stk.pop();
    54                     top.add(cur);
    55                     cur = top;
    56                 }
    57                 l = r+1;
    58             }else if(c == ','){
    59                 if(s.charAt(r-1) != ']'){
    60                     String num = s.substring(l, r);
    61                     if(num.length() != 0){
    62                         cur.add(new NestedInteger(Integer.valueOf(num)));
    63                     }
    64                 }
    65                 l = r+1;
    66             }
    67         }
    68         
    69         return cur;
    70     }
    71 }

    类似Flatten Nested List Iterator.

  • 相关阅读:
    sed命令:删除匹配行和替换
    使用git rebase合并多次commit
    解决flask中文乱码的问题
    PyCharm 2017: Remote debugging using remote interpreter doesn't work
    ansible小结(八)ansible-playbook简单使用
    ansible命令参数介绍
    eclipse 代码自动提示
    oracle start with connect by prior 递归查询
    Android九宫图(draw9patch)
    Android 通过按钮弹出系统菜单(通过Button显示菜单)转
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/7728312.html
Copyright © 2011-2022 走看看