385. 迷你语法分析器

2021-06-09 21:57:00 浏览数 (1)

给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器。 列表中的每个元素只可能是整数或整数嵌套列表 提示:你可以假定这些字符串都是格式良好的: 字符串非空 字符串不包含空格 字符串只包含数字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;
}
}

0 人点赞