Java经典算法:迷你解析器

给定一个以字符串表示的嵌套整数列表,请实现一个解析器以反序列化它。每个元素是一个整数,或一个列表-其元素也可以是整数或其他列表。
注意:您可以假定字符串格式正确:
字符串非空。
字符串不包含空格。
字符串仅包含数字和“ [],”
例如,
给定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的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。在这里插入图片描述

发布了252 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zhaozihao594/article/details/105165562