给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器。 列表中的每个元素只可能是整数或整数嵌套列表 提示:你可以假定这些字符串都是格式良好的: 字符串非空 字符串不包含空格 字符串只包含数字0-9、[、-、,、] 其中的- 是负号 示例 1: 给定 s = "324", 你应该返回一个 NestedInteger 对象,其中只包含整数值 324。 示例 2: 给定 s = "[123,[456,[789]]]", 返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表: 1. 一个 integer 包含值 123 2. 一个包含两个元素的嵌套列表: i. 一个 integer 包含值 456 ii. 一个包含一个元素的嵌套列表 a. 一个 integer 包含值 789
就是一个递归吧,读懂题意就行.
代码语言:javascript复制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;
}
}