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

网站关键词 价格生成设计之家效果图

网站关键词 价格生成,设计之家效果图,上海 网站建设 外包,ppt模板哪里找摘要 在这篇文章中,我们将实现一个基于 Swift 语言的基本计算器。该计算器能够解析和计算包含 、-、* 和 / 的数学表达式,并且遵循运算符的优先级规则。整数除法仅保留整数部分,不能使用 eval() 这样的内置解析方法。 描述 给你一个字符串表…

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

摘要

在这篇文章中,我们将实现一个基于 Swift 语言的基本计算器。该计算器能够解析和计算包含 +-*/ 的数学表达式,并且遵循运算符的优先级规则。整数除法仅保留整数部分,不能使用 eval() 这样的内置解析方法。

描述

给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。

你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

注意: 不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval()

示例 1:

输入: s = "3+2*2"
输出: 7

示例 2:

输入: s = " 3/2 "
输出: 1

示例 3:

输入: s = " 3+5 / 2 "
输出: 5

提示:

  • 1 <= s.length <= 3 * 105
  • s 由整数和算符 ('+', '-', '*', '/') 组成,中间由一些空格隔开
  • s 表示一个 有效表达式
  • 表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1]
  • 题目数据保证答案是一个 32-bit 整数

题解答案

我们可以使用 栈(Stack) 来处理乘法和除法运算的优先级,同时遍历字符串,进行逐步计算。主要步骤如下:

  1. 遍历字符串 s,跳过空格。
  2. 当遇到数字时,将其解析出来。
  3. 当遇到运算符 +-*/ 时,根据之前的运算符决定如何处理:
    • + 直接将数字加入栈。
    • - 取相反数并加入栈。
    • * 取出栈顶元素,与当前数字相乘后再压入栈。
    • / 取出栈顶元素,与当前数字做整数除法后再压入栈。
  4. 遍历结束后,栈中的所有元素求和即为最终结果。

题解代码

import Foundationfunc calculate(_ s: String) -> Int {var stack: [Int] = []var num = 0var sign: Character = "+"let chars = Array(s)for (i, char) in chars.enumerated() {if char.isNumber {num = num * 10 + char.wholeNumberValue!}if "+-*/".contains(char) || i == chars.count - 1 {switch sign {case "+": stack.append(num)case "-": stack.append(-num)case "*": stack.append(stack.removeLast() * num)case "/": stack.append(stack.removeLast() / num)default: break}sign = charnum = 0}}return stack.reduce(0, +)
}// 示例测试
let expr1 = "3+2*2"
let expr2 = " 3/2 "
let expr3 = " 3+5 / 2 "print(calculate(expr1))  // 输出: 7
print(calculate(expr2))  // 输出: 1
print(calculate(expr3))  // 输出: 5

题解代码分析

  1. 解析数字num = num * 10 + char.wholeNumberValue! 逐步解析多位数字。
  2. 处理运算符:当遇到 +-*/ 时,
    • +- 直接将数值(或其相反数)压入栈。
    • */ 取出栈顶元素,与当前数值计算后再压入栈。
  3. 求和:最后对栈中所有元素求和得到最终结果。

示例测试及结果

calculate("3+2*2") // 输出: 7
calculate(" 3/2 ") // 输出: 1
calculate(" 3+5 / 2 ") // 输出: 5

时间复杂度

  • 遍历字符串一次: O(n)
  • 入栈出栈操作: O(1)(均摊)
  • 最终求和: O(n)

综合来看,时间复杂度为 O(n)

空间复杂度

  • 额外使用 stack 来存储运算结果,最坏情况下存储 n/2 个数,空间复杂度为 O(n)

总结

  • 通过 来处理 */ 的优先级问题。
  • 逐步解析数字,遇到操作符时再处理。
  • 遍历结束后计算栈内所有元素的总和 即可得到最终结果。
  • 时间复杂度 O(n),空间复杂度 O(n),适用于大规模输入。

文章转载自:

http://4YO7Q4s1.qdrhf.cn
http://Qd9sDCu5.qdrhf.cn
http://jBLFwYXN.qdrhf.cn
http://XGqFNGG2.qdrhf.cn
http://kNqLvnX1.qdrhf.cn
http://FN95EnRc.qdrhf.cn
http://gVNlZ17u.qdrhf.cn
http://MnCuV567.qdrhf.cn
http://hUJSrfrN.qdrhf.cn
http://ErQAMepl.qdrhf.cn
http://kI4aQ5Br.qdrhf.cn
http://gvXeoMoC.qdrhf.cn
http://qYpe6ROJ.qdrhf.cn
http://7kpzGDKX.qdrhf.cn
http://MtaUAzJP.qdrhf.cn
http://pKdP1wom.qdrhf.cn
http://rpKQHirI.qdrhf.cn
http://yqC0Gmia.qdrhf.cn
http://FsXdFw7H.qdrhf.cn
http://BvQxfS9F.qdrhf.cn
http://oUxgrwIB.qdrhf.cn
http://Z7rDx6ex.qdrhf.cn
http://CcwJ81bO.qdrhf.cn
http://w33dQPir.qdrhf.cn
http://P2sUVyUi.qdrhf.cn
http://AYjruLNx.qdrhf.cn
http://yAUCg7n8.qdrhf.cn
http://GSYCNtTE.qdrhf.cn
http://niu1j07D.qdrhf.cn
http://OX1vownE.qdrhf.cn
http://www.dtcms.com/wzjs/641786.html

相关文章:

  • 东明网站建设wordpress 首页模板
  • 网站不能调用样式加人引流加人网站怎么做
  • 中信云 做网站如何设置个人网站
  • 重庆自适应网站建设做网站开发钱
  • 网站建设与管理案例教程第三版答案深圳网站设计 深圳信科
  • 镇江专业网站建设制作wordpress建群站
  • 做文字头像的网站网站与微信结合
  • 网站发布初期的推广黄金网站软件app大全
  • 北京首华建设经营有限公司网站网站标题能改吗
  • 楼盘网站建设案例编程课网课哪家好
  • 江门网站推广多少钱找段子的各大网站
  • 安卓系统上怎样做网站前端开发萤栈WordPress
  • 网站精品案例南昌网站开发技术
  • 南京seo按天计费seo属于运营还是技术
  • 同一个空间可以做两个网站么六安网站建设找哪家
  • 北京做网站的公司排名做直播网站软件有哪些软件
  • 郑州网站免费制作娃哈哈网络营销策划方案
  • 内蒙古自治区建设厅网站婚庆公司网站建设方案
  • 网站外链暴涨淄博周村网站建设报价
  • 做网站什么最重要有哪些公众号是小黄油的
  • 找人做海报在什么网站找什么网站做玩具的比较多
  • 自己做的网站主页被人篡改seo技术培训价格表
  • s上海网站建设郓城如何做网站seo
  • 网站目录做外链wordpress分类加密
  • 重庆建站公司哪个好网站制作知名 乐云践新专家
  • 合肥专业做网站公司科技网站首页
  • 网站首页的名字通常是网站建设用哪个
  • 网站建设longda网络平台
  • 网站建设服务报价张家港保税区建设局网站
  • 建网站素材个人做民宿需要建立网站吗