给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器。
列表中的每个元素只可能是整数或整数嵌套列表
提示:你可以假定这些字符串都是格式良好的:
字符串非空
字符串不包含空格
字符串只包含数字0-9、[、-、,、]其中的- 是负号
示例 1:
给定 s = "324",
你应该返回一个 NestedInteger 对象,其中只包含整数值 324。
示例 2:给定 s = "[123,[456,[789]]]",
返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表:
1. 一个 integer 包含值 123
2. 一个包含两个元素的嵌套列表:
i. 一个 integer 包含值 456
ii. 一个包含一个元素的嵌套列表
a. 一个 integer 包含值 789
就是一个递归吧,读懂题意就行.
class Solution {
char [] chars;
int cur=0;
public NestedInteger deserialize(String s) {
/**
NestedInteger我也第一次见, 就是一个自己写好的东东,你就用就完事了,类似于List<Integer> 所以添加就OK了
就普通递归dfs就OK
*/
chars=s.toCharArray();
if(chars[0]!='['){
//说明没有 嵌 套整数 是一个数
return new NestedInteger(Integer.parseInt(s));
}
else{
return getNest();
}
}
//返回nest的函数 可能返回嵌套 也可能返回嵌套里面还有嵌套
public NestedInteger getNest(){
NestedInteger nest=new NestedInteger();
int num=0; //记录数字
int sign=1; //记录正数 负数
while(cur<chars.length){
cur++;
if(chars[cur]==','){
continue;//这里直接跳过,因为如果他前面的负数
}else if(chars[cur]=='['){
//获取子集合
nest.add(getNest());
}else if(chars[cur]==']'){
//结束 返回nest
return nest;
}else if(chars[cur]=='-'){
sign=-1;
}else{
//数字
num=num*10+sign*(chars[cur]-'0');
if(chars[cur+1]==','||chars[cur+1]==']'){
//数字结束
nest.add(new NestedInteger(num));
num=0;
sign=1;//默认正数
}
}
}
return null;
}
}