• 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;
        }
    }
    
  • 相关阅读:
    Sketch 画原型比 Axure 好用吗?为什么?
    ps高级磨皮的7个步骤
    算法竞赛入门经典_第二章:循环结构程序设计_上机练习_MyAnswer
    文件操作 & 重定向
    阶乘之和 & 程序运行时间 & 算法分析
    《数据结构与算法分析:C语言描述_原书第二版》CH3表、栈和队列_reading notes
    TIJ——Chapter Two:Everything Is an Object
    LeetCode Reverse Linked List
    LeetCode Contains Duplicate
    LeetCode Contains Duplicate II
  • 原文地址:https://www.cnblogs.com/a1439775520/p/13075773.html
Copyright © 2020-2023  润新知