给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。
列表中的每个元素只可能是整数或整数嵌套列表
class Solution {
public NestedInteger deserialize(String s) {
/**
*/
Deque<NestedInteger> stack = new LinkedList<>();
char[] charArr = s.toCharArray();
int i=0;
int n=charArr.length;
NestedInteger flagNI = new NestedInteger();
boolean isNegative = false;
int num = 0;
while(i<n){
/**
1. 当前字符为,跳过
2. 当前字符为[ 新建一个NI对象,并插入一个标识对象
3. 当前字符为 '-'或者数字,读取该数值,生成NI对象入栈
4. 当前字符为']',开始弹栈,用list存储弹出的NI对象,直到遇到标识对象,将标识对象的前序对象作为父NI。
*/
if(charArr[i]=='['){
NestedInteger ni = new NestedInteger();
stack.addLast(ni);
stack.addLast(flagNI);
}else if(charArr[i]==']'){
List<NestedInteger> list = new ArrayList<>();
while(!stack.isEmpty() && stack.peekLast()!=flagNI){
list.add(stack.pollLast());
}
stack.pollLast();//弹出标志NI
NestedInteger parent = stack.peekLast();
for(int j=list.size()-1;j>=0;j--){
parent.add(list.get(j));
}
}else if(charArr[i]=='-'){
isNegative = true;
}else if(charArr[i]>='0' && charArr[i]<='9'){
num = num*10 + charArr[i]-'0';
if(i==n-1 || charArr[i+1]<'0' || charArr[i+1]>'9'){
NestedInteger ni = new NestedInteger();
num=isNegative==true?-num:num;
ni.setInteger(num);
stack.addLast(ni);
isNegative=false;
num=0;
}
}
i++;
}
return stack.peek();
}
}