js力扣每日一题(2022/4/15)

迷你语法分析器


给定一个字符串 s 表示一个整数嵌套列表,实现一个解析它的语法分析器并返回解析的结果 NestedInteger 。

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

示例一:

输入:s = “324”,
输出:324
解释:你应该返回一个 NestedInteger 对象,其中只包含整数值 324。

示例二:

输入:s = “[123,[456,[789]]]”,
输出:[123,[456,[789]]]
解释:返回一个 NestedInteger 对象包含一个有两个元素的嵌套列表:

  1. 一个 integer 包含值 123
  2. 一个包含两个元素的嵌套列表:
    i. 一个 integer 包含值 456
    ii. 一个包含一个元素的嵌套列表
    a. 一个 integer 包含值 789
/**
 * // This is the interface that allows for creating nested lists.
 * // You should not implement it, or speculate about its implementation
 * function NestedInteger() {
 *
 *     Return true if this NestedInteger holds a single integer, rather than a nested list.
 *     @return {boolean}
 *     this.isInteger = function() {
 *         ...
 *     };
 *
 *     Return the single integer that this NestedInteger holds, if it holds a single integer
 *     Return null if this NestedInteger holds a nested list
 *     @return {integer}
 *     this.getInteger = function() {
 *         ...
 *     };
 *
 *     Set this NestedInteger to hold a single integer equal to value.
 *     @return {void}
 *     this.setInteger = function(value) {
 *         ...
 *     };
 *
 *     Set this NestedInteger to hold a nested list and adds a nested integer elem to it.
 *     @return {void}
 *     this.add = function(elem) {
 *         ...
 *     };
 *
 *     Return the nested list that this NestedInteger holds, if it holds a nested list
 *     Return null if this NestedInteger holds a single integer
 *     @return {NestedInteger[]}
 *     this.getList = function() {
 *         ...
 *     };
 * };
 */
/**
 * @param {string} s
 * @return {NestedInteger}
 */
var deserialize = function(s) {
        return parse(JSON.parse(s))
};

function parse(a) {
    let ret = new NestedInteger();
    if(!(a instanceof Array)) {
        ret.setInteger(a)
        return ret
    }
    for(let i of a) {
        if(i instanceof Array) {
            ret.add(parse(i))
        } else {
            ret.add(new NestedInteger(i))
        }
    }
    return ret
}

这道题讲道理的说我看不懂,看不懂题想要干些什么,最后多少是有点理解:不论传来的参数是什么,你都需要返回一个对象NestedInteger,如果对象中的值有嵌套的数组,你就同样给返回。
在参考题解大佬的代码后,绝对大佬写的非常的好,首先使用JSON.prae(),这个的目的是将传来的字符串转化为对象形式,而该题的要求就是返回一个对象,随后封装一个方法parse()处理该对象中的值,在函数中又创建一个新对象,方法体中首先做一个判断:传进来的对象是不是直接就是一个数组,(注:instanceof是一个简单的判断,这里的a instanceof Array的意思是判断a是不是一个数组)
如果a不是一个数组则直接将a作为一个值添加到ret这个对象中,并且直接返回
如果a是一个数组,则对该数组进行遍历,遍历后还要判断i是不是一个数组,如果是一个数组的话还要接着进行执行parse()方法(注:这里又调用了方法parse()就是我们所说的递归思想)如果i不是一个数组,则将i传入新建的对象中,然后以对象形式添加到ret中,随后进行返回。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lzq喜欢车联网

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值