给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器。

列表中的每个元素只可能是整数或整数嵌套列表

提示:你可以假定这些字符串都是格式良好的:

字符串非空
字符串不包含空格
字符串只包含数字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;
}
}