leetcode每日一题 385. 迷你语法分析器

leetcode每日一题 1672. 最富有客户的资产总量

本地测试没问题,提交返回结果和本地测试不一致
class Solution {
  public NestedInteger deserialize(String s) {
      if(s.charAt(0) != '['){
          return new NestedInteger(Integer.parseInt(s));
      }
      NestedInteger nestedInteger = null;
      char[] chars = s.toCharArray();
      StringBuilder sb = new StringBuilder();
      for (int i = chars.length - 1; i >= 0; i--) {
          if(chars[i] == ']' || chars[i] == ','){
              continue;
          }
          if(chars[i] == '['){
              if(nestedInteger == null){
                  nestedInteger = new NestedInteger(Integer.parseInt(sb.toString()));
              }else {
                  NestedInteger nestedInteger2 = new NestedInteger(Integer.parseInt(sb.toString()));
                  nestedInteger2.add(nestedInteger);
                  nestedInteger = nestedInteger2;
              }
              sb = new StringBuilder();
          }else{
              sb.insert(0,chars[i]);
          }
      }
      if(sb.length() != 0){
          nestedInteger = new NestedInteger(Integer.parseInt(sb.toString()));
      }
      return nestedInteger;
  }
}
官网答案

class Solution {

  int index =0 ;
  public NestedInteger deserialize(String s) {
      int len =s.length();
      if(s.charAt(index) != '['){//为single integer
       
          int start =index ,end =index;
          char ch ;
          while(end < len && (ch = s.charAt(end)) !=',' && ch != ']' )end++;
          index=end;
          //如果end 指向的不是逗号,那么表示到达父节点的末尾。
          if(index < len && s.charAt(index) ==',')index++;
          return new NestedInteger(Integer.parseInt(s.substring(start,end)));
      }else{//存在 nested list
          index++;//跳过 [
            NestedInteger in =new NestedInteger();
          while(index<len && s.charAt(index) !=']') in.add( deserialize(s));
          index++;//跳过]
          if(index < len && s.charAt(index) ==',')index++;
          return in;
      }
  }
}

 

 

posted @ 2022-04-15 11:14  java架构师1  阅读(30)  评论(0)    收藏  举报