Java non-recursive solution


  • 0
    I
    /**
     * // 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();
     * }
     */
    public class Solution {
        public NestedInteger deserialize(String s) {
            
            Stack<NestedInteger> st = new Stack<NestedInteger>();
            int i = 0;
            while(i < s.length()) {
                if(s.charAt(i) == '[') {
                    st.push(new NestedInteger());
                    i++;
                    continue;
                }
                
                if(s.charAt(i) == ']') {
                    NestedInteger tmp = st.pop();
                    if(st.isEmpty()) {
                        return tmp;
                    } else {
                        st.peek().add(tmp);
                    }
                    
                    i++;
                    continue;
                }
                
                if(Character.isDigit(s.charAt(i)) || s.charAt(i) == '-') {
                    String num = new String();
                    while(i < s.length() && (Character.isDigit(s.charAt(i)) || s.charAt(i) == '-')) {
                        num += s.charAt(i) + "";
                        i++;
                    }
                    
                    if(!num.isEmpty()) {
                        NestedInteger tmp = new NestedInteger(new Integer(num));
                        if(st.isEmpty()) {
                            return tmp;
                        }
                        
                        st.peek().add(tmp);
                    }
                    
                    continue;
                }
                
                i++;
            }
            
            return null;
        }
    }
    

Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.