385. 迷你语法分析器
给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器。
列表中的每个元素只可能是整数或整数嵌套列表
提示:你可以假定这些字符串都是格式良好的:
示例 1:
给定 s = "324", 你应该返回一个 NestedInteger 对象,其中只包含整数值 324。
示例 2:
给定 s = "[123,[456,[789]]]", 返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表: 1. 一个 integer 包含值 123 2. 一个包含两个元素的嵌套列表: i. 一个 integer 包含值 456 ii. 一个包含一个元素的嵌套列表 a. 一个 integer 包含值 789
/ * // This is the interface that allows for creating nested lists. * // You should not implement it, or speculate about its implementation * public interface NestedInteger { * // Constructor initializes an empty nested list. * public NestedInteger(); * * // Constructor initializes a single integer. * public NestedInteger(int value); * * // @return true if this NestedInteger holds a single integer, rather than a nested list. * public boolean isInteger(); * * // @return the single integer that this NestedInteger holds, if it holds a single integer * // Return null if this NestedInteger holds a nested list * public Integer getInteger(); * * // Set this NestedInteger to hold a single integer. * public void setInteger(int value); * * // Set this NestedInteger to hold a nested list and adds a nested integer to it. * public void add(NestedInteger ni); * * // @return the nested list that this NestedInteger holds, if it holds a nested list * // Return null if this NestedInteger holds a single integer * public List
getList(); * } */
class Solution {
public NestedInteger deserialize(String s) {
if(s.charAt(0)!='[') {
return new NestedInteger(Integer.valueOf(s)); } else {
return deserialize1(s.substring(1)); } } public NestedInteger deserialize1(String s) {
NestedInteger res = new NestedInteger(); //从左到右扫描 for(int i=0;i<s.length();i++) {
char c = s.charAt(i); if(c>='0'&&c<='9'||c=='-') {
int n = 0; int flag = 1; for(;i<s.length();i++) {
c = s.charAt(i); if(c>='0'&&c<='9') {
n = n*10 + c-'0'; } else if(c=='-'){
flag = -1; } else {
i = i-1; break; } } res.add(new NestedInteger(flag*n)); } else if(c=='[') {
int index = i; int counter = 0; for(;i<s.length();i++) {
c = s.charAt(i); if(c=='[') counter++; else if(c==']') counter--; if(counter==0) {
res.add(deserialize1(s.substring(index+1,i))); break; } } } } return res; } }
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226101.html原文链接:https://javaforall.net
