leetcode每日一题 385. 迷你语法分析器
本地测试没问题,提交返回结果和本地测试不一致
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;
}
}
}


浙公网安备 33010602011771号