当前位置: 首页 > news >正文

自己怎么建立自己的国际网站网站建设 宜宾

自己怎么建立自己的国际网站,网站建设 宜宾,wordpress添加51统计,泉州网站排名文章目录摘要描述题解答案题解代码分析代码解析示例测试及结果时间复杂度空间复杂度总结摘要 在日常开发中,我们经常会遇到需要解析字符串的场景,比如配置文件、日志格式,甚至是网络传输中的 JSON 数据。这道题就类似于一个“小型 JSON 解析…

在这里插入图片描述
在这里插入图片描述

文章目录

    • 摘要
    • 描述
    • 题解答案
    • 题解代码分析
      • 代码解析
    • 示例测试及结果
    • 时间复杂度
    • 空间复杂度
    • 总结

摘要

在日常开发中,我们经常会遇到需要解析字符串的场景,比如配置文件、日志格式,甚至是网络传输中的 JSON 数据。这道题就类似于一个“小型 JSON 解析器”,给定一个描述嵌套列表的字符串,要求我们把它还原成嵌套的数据结构 NestedInteger

本文会从题目描述入手,逐步分析如何用栈的方式来解析字符串,并给出 Swift 的完整解法与运行示例。最后,我们也会结合实际场景聊聊这个题目背后的工程意义。

描述

题目的输入是一个字符串 s,它可能是:

  1. 单个整数,比如 "324"
  2. 一个嵌套的整数列表,比如 "[123,[456,[789]]]"

目标是返回一个 NestedInteger 对象。这个类已经预定义好,支持以下操作:

  • isInteger():判断是否是单个整数。
  • getInteger():获取整数值。
  • getList():获取嵌套列表。
  • add(_ elem: NestedInteger):往列表里添加一个元素。

换句话说,我们要写一个语法分析器,把字符串转换成 NestedInteger

题解答案

常见的解析方法有两种:

  1. 递归法:遇到 [ 就递归解析子列表,遇到 ] 就返回。
  2. 栈法:遍历字符串,遇到 [ 就新建一个列表对象压栈,遇到 ] 就出栈并加入上层。

这里我们采用 栈法,因为更直观,也更接近手动实现一个 JSON 解析器的过程。

题解代码分析

完整 Swift 实现如下:

import Foundation// 模拟 LeetCode 提供的 NestedInteger 类
class NestedInteger {private var integer: Int?private var list: [NestedInteger] = []init() {}init(_ value: Int) {self.integer = value}func isInteger() -> Bool {return integer != nil}func getInteger() -> Int? {return integer}func setInteger(_ value: Int) {self.integer = value}func add(_ elem: NestedInteger) {list.append(elem)}func getList() -> [NestedInteger] {return list}// 方便打印调试func toString() -> String {if let value = integer {return "\(value)"} else {return "[" + list.map { $0.toString() }.joined(separator: ",") + "]"}}
}class Solution {func deserialize(_ s: String) -> NestedInteger {// 如果输入是单个整数,直接返回if let value = Int(s) {return NestedInteger(value)}var stack: [NestedInteger] = []var numBuffer = ""var negative = falsevar current: NestedInteger? = nilfor char in s {if char == "[" {let ni = NestedInteger()if let top = stack.last {top.add(ni)}stack.append(ni)} else if char == "]" {if !numBuffer.isEmpty {let num = (negative ? -1 : 1) * Int(numBuffer)!stack.last?.add(NestedInteger(num))numBuffer = ""negative = false}current = stack.popLast()} else if char == "," {if !numBuffer.isEmpty {let num = (negative ? -1 : 1) * Int(numBuffer)!stack.last?.add(NestedInteger(num))numBuffer = ""negative = false}} else if char == "-" {negative = true} else if char.isNumber {numBuffer.append(char)}}return current!}
}

代码解析

  1. NestedInteger:我们自己实现一个简化版,方便测试。

  2. deserialize() 方法

    • 如果整个字符串是单个整数,直接返回。

    • 用栈来保存当前的嵌套结构。

    • 遍历字符串:

      • 遇到 [:新建一个列表对象,压入栈。
      • 遇到数字或 -:存入缓冲区,等到完整数字解析完成再入栈。
      • 遇到 ,]:把缓冲区里的数字变成 NestedInteger 对象,加入当前列表。
    • 最后返回栈顶的对象。

这种方法跟手动解析 JSON 或 XML 很像,工程里也常见。

示例测试及结果

我们写一个小 demo 来测试:

let solution = Solution()let ex1 = "324"
let result1 = solution.deserialize(ex1)
print("输入: \(ex1)")
print("输出: \(result1.toString())\n")let ex2 = "[123,[456,[789]]]"
let result2 = solution.deserialize(ex2)
print("输入: \(ex2)")
print("输出: \(result2.toString())\n")

运行结果:

输入: 324
输出: 324输入: [123,[456,[789]]]
输出: [123,[456,[789]]]

这跟题目要求完全一致。

时间复杂度

  • 我们只遍历了一次字符串,每个字符都处理一次,所以 O(n)
  • 数字解析和栈操作都是常量时间。

空间复杂度

  • 栈的深度最多等于嵌套层数。
  • 所以空间复杂度是 O(n),主要用于存储结果对象和栈。

总结

这道题看起来是算法题,其实就是一个小型的 语法解析器
它考察了两个核心点:

  1. 如何设计数据结构来表达嵌套关系。
  2. 如何用栈来解析字符串,避免递归层数过深。

在实际场景中,这个思路非常有用,比如:

  • 写一个轻量级的配置解析器(像 JSON、YAML)。
  • 解析游戏关卡脚本,描述嵌套的任务和事件。
  • 从日志中提取嵌套的数据结构,方便分析。

所以,这不仅仅是一道刷题,更是把我们带入了“编译原理”的世界。

http://www.dtcms.com/a/556427.html

相关文章:

  • 郑州租赁房网站建设印度人通过什么网站做国际贸易
  • 挂号网站建设植物提取网站做的比较好的厂家
  • c# asp.net网站开发书wordpress禁止查看源代码
  • 网站建设后期维护做网页网站需要钱吗
  • 网站没收录要怎么做百度站长工具域名查询
  • 茂名网站开发公司推荐和初中生做视频网站
  • 大良营销网站建设策划wordpress集成微信收款
  • 网站备案号去哪查询互联网新项目在哪里找
  • 绍兴金圣建设有限公司网站网站群建设平台
  • 怎么做好网站开发_设计wordpress 小说连载
  • 企业内部网站源码杭州上城区抖音seo有多好
  • 门户网站建设管理工作方案wordpress外贸营销插件
  • 响应式网站免费模板下载wordpress制作的网页
  • 教育机构网站开发山东规划 建设部门的网站
  • 网站服务器迁移步骤全国大学生平面设计大赛
  • 网站蓝色配色做网站都能用什么做
  • 网站开发是什么专业杭州 平台 公司 网站建设
  • 静态网站模板古典古董交易网站怎么做
  • 怎么提升网站排名中英文网站开发
  • 建站报告2000字网站策划书内容
  • 织梦大气蓝色门户资讯网站模板江油网站建设制作策划哪家专业
  • 天津网站建设技术外包软件开发定制平台
  • 北京托管网站网站开始怎么做的
  • 网站备案模板创建微信公众号步骤
  • 做网站用到ps么网站色彩搭配方案
  • android 移动网站开发详解长沙网站建设公司哪家专业
  • 珠海网站建设珠海公司网站开发交接注意事项
  • 外贸企业网站制作公司现在的网站开发用什么技术
  • net网站阿里云主机配置抖音seo优化
  • wordpress建多个网站全景制作软件app