给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器。

列表中的每个元素只可能是整数或整数嵌套列表

提示:你可以假定这些字符串都是格式良好的:

  • 字符串非空
  • 字符串不包含空格
  • 字符串只包含数字0-9[- ,]

示例 1:

给定 s = "324",你应该返回一个 NestedInteger 对象,其中只包含整数值 324。

示例 2:

给定 s = "[123,[456,[789]]]",返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表:1. 一个 integer 包含值 123
2. 一个包含两个元素的嵌套列表:i.  一个 integer 包含值 456ii. 一个包含一个元素的嵌套列表a. 一个 integer 包含值 789

/**
 * // This is the interface that allows for creating nested lists.
 * // You should not implement it, or speculate about its implementation
 * class NestedInteger {
 *   public:
 *     // Constructor initializes an empty nested list.
 *     NestedInteger();
 *
 *     // Constructor initializes a single integer.
 *     NestedInteger(int value);
 *
 *     // Return true if this NestedInteger holds a single integer, rather than a nested list.
 *     bool isInteger() const;
 *
 *     // Return the single integer that this NestedInteger holds, if it holds a single integer
 *     // The result is undefined if this NestedInteger holds a nested list
 *     int getInteger() const;
 *
 *     // Set this NestedInteger to hold a single integer.
 *     void setInteger(int value);
 *
 *     // Set this NestedInteger to hold a nested list and adds a nested integer to it.
 *     void add(const NestedInteger &ni);
 *
 *     // Return the nested list that this NestedInteger holds, if it holds a nested list
 *     // The result is undefined if this NestedInteger holds a single integer
 *     const vector<NestedInteger> &getList() const;
 * };
 */
class Solution {
public:
    NestedInteger deserialize(string s) {
        if (s.empty()) return NestedInteger();
        if (s[0] != '[') return NestedInteger(stoi(s));
        if (s.size() <= 2) return NestedInteger();
        NestedInteger res;
        int start = 1, cnt = 0;
        for (int i = 1; i < s.size(); ++i) {
            if (cnt == 0 && (s[i] == ',' || i == s.size() - 1)) {
                res.add(deserialize(s.substr(start, i - start)));
                start = i + 1;
            } else if (s[i] == '[') ++cnt;
            else if (s[i] == ']') --cnt;
        }
        return res;
    }
};

385.迷你语法分析器相关推荐

  1. Java实现 LeetCode 385 迷你语法分析器

    385. 迷你语法分析器 给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器. 列表中的每个元素只可能是整数或整数嵌套列表 提示:你可以假定这些字符串都是格式良好的: 字符串非空 字符串 ...

  2. LeetCode 385. 迷你语法分析器(栈)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器. 列表中的每个元素只可能是整数或整数嵌套列表 提示:你可以假定这些字符串都是格式良好的: ...

  3. 385. 迷你语法分析器

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

  4. leetcode 385. Mini Parser | 385. 迷你语法分析器(Java)

    题目 https://leetcode.com/problems/mini-parser/ 题解 只要有耐心分析清楚每一种状态就可以啦. /*** // This is the interface t ...

  5. leetcode 385. 迷你语法分析器

    题目链接 思路:递归 分析:这个题主要在于要看懂题目意思,这个NestedInteger对象里面就是套了一个NestedInteger对象. 很明显,这是个嵌套的定义,那么我们可以用递归的思路来实现. ...

  6. LR(1)语法分析器生成器(生成Action表和Goto表)java实现(二)

    updata : 附我之前bilibili讲解视频链接 : https://www.bilibili.com/video/av63666423?share_medium=android&sha ...

  7. 递归下降文法C语言实验报告,递归下降语法分析器实验报告.doc

    递归下降语法分析器实验报告 编译原理实验报告 题目: 递归下降语法分析器 学 院 计算机科学与技术 专 业 xxxxxxxxxxxxxxxx 学 号 xxxxxxxxxxxx 姓 名 宁剑 指导教师 ...

  8. PHP语法分析器:RE2C BISON 总结

    在这之前,我曾经尝试过一个项目,就是将我们的PHP代码自动生成so扩展, 编译到PHP中,我叫它 phptoc. 但是由于各种原因,暂停了此项目. 写这篇文章一是因为这方面资料太少,二是把自己的收获总 ...

  9. 编译原理 - 实验三 - 递归下降语法分析器的调试及扩展

    一. 语法分析介绍 语法分析是编译过程的核心部分,它的主要任务是按照程序语言的语法规则,从由词法分析输出的源程序符号串中识别出各类语法成分,同时进行语法检查,为语义分析和代码生成做准备.执行语法分析任 ...

  10. java实现语法分析器_语法分析 | 语法分析的任务

    在之前,我们有对编译器做过一定的介绍,我们认为编译器是具有一定流水线结构的软件系统.它可以分为前端,中端和后端这样的不同的阶段. 编译器前端 对于我们正在研究的前端,我们已经通过词法分析的学习掌握了从 ...

最新文章

  1. Spring Boot 中的 @EnableAutoConfiguration 是如何处理的?
  2. 娃哈哈信息部李钒助阵FBS2017 共探食品饮料信息化之路
  3. 语音信号处理MATLAB实现
  4. 小白如何购买阿里云服务器(2019最详细教程)
  5. ROS 发布kitti数据集的gps信息
  6. 生成费氏数列 -思维训练for
  7. word中删除分节符时页面格式会发生改变
  8. 如何形象的理解泰勒展开
  9. 方差为什么用平方不用绝对值,为什么要对差值求平方而不是取标准偏差的绝对值?...
  10. Java Web基础
  11. Linux中service文件详解
  12. Loading mirror speeds from cached hostfile
  13. 工业级光纤收发器的芯片介绍
  14. java html合并单元格内容居中显示_合并Al:H1单元格区域,使合并的内容居中显示。...
  15. MATLB|基于matpower优化调度的风力模型预测
  16. 湖北武汉资料员培训资料员在建筑工程中的作用建筑七大员培训
  17. javascript脚本语言电子书大全免费下载
  18. C#下载文件:WebClient
  19. FAT16和FAT32文件定位
  20. 国际信用卡收款——跨境拒付!

热门文章

  1. 5星评价,1位小数显示
  2. SharePoint 2013 Error - File names can't contain the following characters: ? # {} % ~ / \.
  3. cisco用户隔离配置
  4. Hibernate 懒加载 Unable to evaluate the expression Method threw ‘org.hibernate.LazyInitializationExcept
  5. 乐迪机器人正确操作_乐迪智能早教机器人好用吗 乐迪智能早教机器人使用测评...
  6. Linux学习笔记6 - 用户和组群账户管理
  7. 安装高版本的java_运行“需要Java 11或更高版本”的Visual Studio代码。请下载并安装最新的JDK”...
  8. rabbitmq python 发送失败_RabbitMQ Python端发送消息给Java端 接受消息全数字问题
  9. 计算机丢失disrupt,disrupt造句
  10. 能运行c语言的最便宜电脑配置,低配置电脑流畅运行Win7的技巧