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
Was this helpful?