题目描述:
给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。
列表中的每个元素只可能是整数或整数嵌套列表
示例 1:
输入:s = “324”,
输出:324
解释:你应该返回一个 NestedInteger 对象,其中只包含整数值 324。
示例 2:
输入:s = “[123,[456,[789]]]”,
输出:[123,[456,[789]]]
解释:返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表:
- 一个 integer 包含值 123
- 一个包含两个元素的嵌套列表:
i. 一个 integer 包含值 456
ii. 一个包含一个元素的嵌套列表
a. 一个 integer 包含值 789
提示:
1 <= s.length <= 5 * 104
s 由数字、方括号 “[]”、负号 ‘-’ 、逗号 ','组成
用例保证 s 是可解析的 NestedInteger
输入中的所有值的范围是 [-106, 166]
代码:
package dayLeetCode;
import java.util.List;
public class dayleetcode385 {
int index = 0;
// 因为该类型的数据中的数据只能是整数,或者是该数据类型的数据 所以我们很明显可以通过递归的方式来实现
public NestedInteger deserialize(String s) {
if (s.charAt(index) == '['){
index++;
NestedInteger nestedInteger = new NestedInteger();
while (s.charAt(index) != ']'){
// 如果该字符是',' 跳过
if (s.charAt(index) == ','){
index++;
}
// 是数字的话我们就将这个数字字符串转换为数字
nestedInteger.add(deserialize(s));
}
// 跳过']'
index++;
return nestedInteger;
}
else {
int tmp = 1;
// 可能是负数
if (s.charAt(index) == '-'){
index++;
tmp = -1;
}
int num = 0;
// 将其转换为数字
// isDigit(char ch) 判断ch是否是数字
while(index < s.length() && Character.isDigit(s.charAt(index))){
num = num * 10 + s.charAt(index) - '0';
index++;
}
return new NestedInteger(num * tmp);
}
}
}
class NestedInteger{
}