栈-N385-迷你语法分析器

2019-04-10  本文已影响0人  三次元蚂蚁

题目

思路

代码

/**
 * // 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) {
        LinkedList<NestedInteger> stack = new LinkedList<>();
        StringBuilder numberStr = new StringBuilder();
        NestedInteger top;
        
        for (char c : s.toCharArray()) {
            switch (c) {
                case '[':
                    stack.push(new NestedInteger());
                    break;
                case ',':
                    if (numberStr.length() > 0) {
                        stack.peek().add(new NestedInteger(Integer.parseInt(numberStr.toString())));
                    numberStr = new StringBuilder();
                    }
                    break;
                case ']':
                    if (numberStr.length() > 0) {
                        stack.peek().add(new NestedInteger(Integer.parseInt(numberStr.toString())));
                    numberStr = new StringBuilder();
                    }
                    
                    top = stack.pop();
                    if (stack.isEmpty()) {
                        return top;
                    } else {
                        stack.peek().add(top);
                    }
                    break;
                default:
                    numberStr.append(c);
                    break;
            }
        }
        
        if (numberStr.length() > 0) {
            return new NestedInteger(Integer.parseInt(numberStr.toString()));
        } else {
            return stack.peek();
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读