385. Mini Parser

/**
 * // 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 empty list if this NestedInteger holds a single integer
 *     public List<NestedInteger> getList();
 * }
 */
class Solution {
    public NestedInteger deserialize(String s) {
        Deque<NestedInteger> stack = new LinkedList<>();
        int num = 0;
        int sign =1;
        for(int i=0; i<s.length(); i++){
            char c = s.charAt(i);
            switch(c){
                case '[':
                    stack.push(new NestedInteger());
                    break;
                case ']':
                    if(s.charAt(i-1)<='9' && s.charAt(i-1)>='0'){
                        stack.peek().add(new NestedInteger(num*sign));
                        num=0;
                        sign=1;
                    }
                    if(stack.size()>1){
                        NestedInteger current = stack.pop();
                        stack.peek().add(current);
                    }
                    break;
                case ',':
                    if(s.charAt(i-1)<='9' && s.charAt(i-1)>='0'){
                        stack.peek().add(new NestedInteger(num*sign));
                        num=0;
                        sign=1;
                    }
                    break;
                case '-':
                    sign = -1;
                    break;
                default:
                    num=c-'0'+num*10;
                    
            }
        }
            
        return stack.size()>0 ? stack.pop() : new NestedInteger(sign*num);
    }
}

Last updated