给定一个以字符串表示的嵌套整数列表,请实现一个解析器以反序列化它。每个元素是一个整数,或一个列表-其元素也可以是整数或其他列表。
注意:您可以假定字符串格式正确:
字符串非空。
字符串不包含空格。
字符串仅包含数字和“ [],”
例如,
给定s =“ [123,[456,[789]]]”,
返回一个NestedInteger对象,其中包含带有2个元素的嵌套列表:
1.包含值123的整数。
2.包含两个元素的嵌套列表:
一世。包含值456的整数。
ii。具有一个元素的嵌套列表:
一个。包含值789的整数。
Java解决方案
为了解决这个问题,我们应该添加更多示例来说明预期的输出是什么。例如,s =“ [123,[456],789]”是合法输入。
public NestedInteger deserialize(String s) {
Stack stack = new Stack<>();
StringBuilder sb = new StringBuilder();
for(int i=0; i<s.length(); i++){
char c = s.charAt(i);
switch(c){
case '[':
NestedInteger ni = new NestedInteger();
stack.push(ni);
break;
case ']':
if(sb.length()>0){ //123, not [456],
stack.peek().add(new NestedInteger(Integer.parseInt(sb.toString())));
sb=sb.delete(0, sb.length());
}
NestedInteger top = stack.pop();
if(stack.isEmpty()){
return top;
}else{
stack.peek().add(top);
}
break;
case ',':
if(sb.length()>0){ //hande case "123," not "[456],"
stack.peek().add(new NestedInteger(Integer.parseInt(sb.toString())));
sb=sb.delete(0, sb.length());
}
break;
default: //digits
sb.append(c);
}
}
//handle case "123"
if(sb.length()>0){
return new NestedInteger(Integer.parseInt(sb.toString()));
}
return null;}
最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。