给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器。
列表中的每个元素只可能是整数或整数嵌套列表
提示:你可以假定这些字符串都是格式良好的:
字符串非空
字符串不包含空格
字符串只包含数字0-9、[、-、,、]
示例 1:
给定 s = “324”,
你应该返回一个 NestedInteger 对象,其中只包含整数值 324。
示例 2:
给定 s = “[123,[456,[789]]]”,
返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表:
- 一个 integer 包含值 123
- 一个包含两个元素的嵌套列表:
i. 一个 integer 包含值 456
ii. 一个包含一个元素的嵌套列表
a. 一个 integer 包含值 789
方法一:递归
class Solution {
char[] chars;
int index = 0;
public NestedInteger deserialize(String s) {
chars = s.toCharArray();
if(chars[0] != '[')return new NestedInteger(Integer.valueOf(s));
return getNest();
}
public NestedInteger getNest(){
int num = 0;
int sign = 1;
NestedInteger nest = new NestedInteger();
while(index < chars.length){
index++;
if(chars[index] == ',')continue;
else if(chars[index] == '[')nest.add(getNest());
else if(chars[index] == ']')return nest;
else if(chars[index] == '-')sign = -1;
else{
num = num*10+sign*(chars[index]-'0');
if(chars[index+1] == ',' || chars[index+1] == ']'){
nest.add(new NestedInteger(num));
num = 0;
sign = 1;
}
}
}
return null;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/mini-parser