• Java实现 LeetCode 385 迷你语法分析器


    385. 迷你语法分析器

    给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器。

    列表中的每个元素只可能是整数或整数嵌套列表

    提示:你可以假定这些字符串都是格式良好的:

    字符串非空
    字符串不包含空格
    字符串只包含数字0-9, [, - , ]

    示例 1:

    给定 s = "324",
    
    你应该返回一个 NestedInteger 对象,其中只包含整数值 324

    示例 2:

    给定 s = "[123,[456,[789]]]",
    
    返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表:
    
    1. 一个 integer 包含值 123
    2. 一个包含两个元素的嵌套列表:
        i.  一个 integer 包含值 456
        ii. 一个包含一个元素的嵌套列表
             a. 一个 integer 包含值 789
    
    /**
     * // 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();
     * }
     */
    class Solution {
          public NestedInteger deserialize(String s) {
            if(s.charAt(0)!='[') {
                return new NestedInteger(Integer.valueOf(s));
            }
            else {
                return deserialize1(s.substring(1));
            }
        }
    
        public NestedInteger deserialize1(String s) {
            NestedInteger res = new NestedInteger();
            //从左到右扫描
            for(int i=0;i<s.length();i++) {
                char c = s.charAt(i);
                if(c>='0'&&c<='9'||c=='-') {
                    int n = 0; int flag = 1;
                    for(;i<s.length();i++) {
                        c = s.charAt(i);
                        if(c>='0'&&c<='9') {
                            n = n*10 + c-'0';
                        } else if(c=='-'){
                            flag = -1;
                        } else {
                            i = i-1;
                            break;
                        }
                    }
                    res.add(new NestedInteger(flag*n));
                }
                else if(c=='[') {
                    int index = i;
                    int counter = 0;
                    for(;i<s.length();i++) {
                        c = s.charAt(i);
                        if(c=='[') counter++;
                        else if(c==']') counter--;
                        if(counter==0) {
                            res.add(deserialize1(s.substring(index+1,i)));
                            break;
                        }
                    }
                }
            }
            return res;
        }
    }
    
  • 相关阅读:
    MSCRM2011 在Form里创建一个密码栏
    MSCRM 2011 可视化Ribbon编辑工具,超级强大!
    C# List去重
    理解Dynamic CRM2011 Ribbon里Sequence 和TemplateAlias意思
    SQL 语法大全
    SQL语句case关键字的用法
    ASP.NET 导出Excel时,某单元格内一部分文字加粗加下划线
    ASP.NET 导出Excel时,出现CLSID {0002450000000000C000000000000046} ,拒绝访问。
    通过DOM节点操作来获取表单信息
    嗨,博客园
  • 原文地址:https://www.cnblogs.com/a1439775520/p/12946527.html
Copyright © 2020-2023  润新知