【LeetCode: 224. 基本计算器 + 模拟 + 栈】

在这里插入图片描述

🚀 算法题 🚀

🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀
🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨
🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文|经验分享|好用的网站工具分享💎💎💎
🌲 恭喜你发现一枚宝藏博主,赶快收入囊中吧🌻
🌲 人生如棋,我愿为卒,行动虽慢,可谁曾见我后退一步?🎯🎯

🚀 算法题 🚀

在这里插入图片描述

在这里插入图片描述

🍔 目录

    • 🚩 题目链接
    • ⛲ 题目描述
    • 🌟 求解思路&实现代码&运行结果
      • ⚡ 模拟 + 栈
        • 🥦 求解思路
        • 🥦 实现代码
        • 🥦 运行结果
    • 💬 共勉

🚩 题目链接

  • 224. 基本计算器

⛲ 题目描述

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

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

示例 1:

输入:s = “1 + 1”
输出:2
示例 2:

输入:s = " 2-1 + 2 "
输出:3
示例 3:

输入:s = “(1+(4+5+2)-3)+(6+8)”
输出:23

提示:

1 <= s.length <= 3 * 105
s 由数字、‘+’、‘-’、‘(’、‘)’、和 ’ ’ 组成
s 表示一个有效的表达式
‘+’ 不能用作一元运算(例如, “+1” 和 “+(2 + 3)” 无效)
‘-’ 可以用作一元运算(即 “-1” 和 “-(2 + 3)” 是有效的)
输入中不存在两个连续的操作符
每个数字和运行的计算将适合于一个有符号的 32位 整数

🌟 求解思路&实现代码&运行结果


⚡ 模拟 + 栈

🥦 求解思路
  1. 参考双栈解法题解
  2. 通过俩个栈来实现基本计算器的功能,一个栈用来存储数字,另外一个栈用来存储操作数,主要包括(、)、+、-。
  3. 主要思路:从前向后遍历,对遍历到的字符做分情况讨论
  4. 如果遇到空格直接跳过;如果是左括号加入操作数栈中,等到与右括号匹配;如果遇到右括号,使用现有的数字栈和操作数栈进行计算,直到遇到左边最近的一个左括号为止,计算结果放到数字栈中;如果遇到数字,从当前位置开始继续往后取,将整一个连续数字整体取出,加入到数字栈中;如果遇到加号或者减号,将操作放入 操作栈中,在放入之前把栈内的都先计算,计算结果放到数字栈中,操作最后加入操作栈中。
  5. 有了基本的思路,接下来我们就来通过代码来实现一下。
🥦 实现代码
class Solution {public int calculate(String s) {Deque<Integer> nums = new ArrayDeque<>();Deque<Character> ops = new ArrayDeque<>();nums.addLast(0);s = s.replaceAll(" ", "");int n = s.length();char[] cs = s.toCharArray();for (int i = 0; i < n; i++) {char c = cs[i];if (c == '(') {ops.addLast(c);} else if (c == ')') {while (!ops.isEmpty()) {char op = ops.peekLast();if (op != '(') {calc(nums, ops);} else {ops.pollLast();break;}}} else {if (Character.isDigit(c)) {int num = 0;int j = i;while (j < n && Character.isDigit(cs[j]))num = num * 10 + (int) (cs[j++] - '0');nums.addLast(num);i = j - 1;} else {if (i > 0 && (cs[i - 1] == '(' || cs[i - 1] == '+' || cs[i - 1] == '-')) {nums.addLast(0);}while (!ops.isEmpty() && ops.peekLast() != '(')calc(nums, ops);ops.addLast(c);}}}while (!ops.isEmpty())calc(nums, ops);return nums.peekLast();}public void calc(Deque<Integer> nums, Deque<Character> ops) {if (nums.isEmpty() || nums.size() < 2)return;if (ops.isEmpty())return;int b = nums.pollLast(), a = nums.pollLast();char op = ops.pollLast();nums.addLast(op == '+' ? a + b : a - b);}}
🥦 运行结果

在这里插入图片描述


💬 共勉

最后,我想和大家分享一句一直激励我的座右铭,希望可以与大家共勉!

在这里插入图片描述

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/759662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java的集合体系及相关数据结构---Collection系列

​​​​​​​ 其中&#xff0c;有序和无序是指存取时候的顺序一致或者不一致&#xff1b; Collection是单列集合的顶层接口&#xff0c;它的方法全部单列集合可用。 Collection方法 方法名说明boolean add(E e)添加元素boolean remove(Object o)从集合中移除指定的元素…

微信小程序事件处理

微信小程序中的事件处理是指在微信小程序中处理用户的交互操作&#xff0c;例如点击按钮、选择器改变等。微信小程序中的事件处理分为以下几种&#xff1a; bindtap&#xff1a;点击事件。bindchange&#xff1a;选择器改变事件。bounddata&#xff1a;数据改变事件。 以下是…

SQL Server 的日志文件占满硬盘时处理方法

当 SQL Server 的日志文件占满硬盘时&#xff0c;可以采取以下几个步骤来解决问题&#xff1a; 1. 备份和压缩日志文件&#xff1a;首先&#xff0c;你可以通过备份数据库日志文件并压缩它们来释放磁盘空间。可以使用 SQL Server Management Studio (SSMS) 或 Transact-SQL (T…

语音转文字——sherpa ncnn语音识别离线部署C++实现

简介 Sherpa是一个中文语音识别的项目&#xff0c;使用了PyTorch 进行语音识别模型的训练&#xff0c;然后训练好的模型导出成 torchscript 格式&#xff0c;以便在 C 环境中进行推理。尽管 PyTorch 在 CPU 和 GPU 上有良好的支持&#xff0c;但它可能对资源的要求较高&#x…

HarmonyOS 应用开发案例

本帖下方集中了HarmonyOS Next应用开发时&#xff0c;会遇到的常见应用案例。后续会持续更新大量案例&#xff0c;帮助开发者快速学习。欢迎感兴趣的同学加入Q&#xff1a;454901491 72.手写绘制及保存图片案例&#xff08;0319更新&#xff09;&#xff08;点此查看源码实现&…

Windows10无盘母盘制作-以云更新为例

Windows10无盘母盘制作-以云更新为例 缘起环境准备创建虚拟机安装系统导出系统 缘起 网吧客户端在实际环境中&#xff0c;经常要面对形形色色对无盘系统&#xff0c;五花八门对无盘镜像&#xff0c; 为了方便确认不同无盘环境对客户的对影响&#xff0c;决定自己制作一个无盘母…

项目管理平台-01-BugClose 入门介绍

拓展阅读 Devops-01-devops 是什么&#xff1f; Devops-02-Jpom 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件 代码质量管理 SonarQube-01-入门介绍 项目管理平台-01-jira 入门介绍 缺陷跟踪管理系统&#xff0c;为针对缺陷管理、任务追踪和项目管理的商业…

【python + Django】Django模板语法 + 请求和响应

前言&#xff1a; 现在现在&#xff0c;我们要开始将变量的值展现在页面上面啦&#xff01; 要是只会显示静态页面&#xff0c;我们的页面也太难看和死板了&#xff0c; 并且数据库的数据也没法展现在页面上。 但是呢&#xff0c;模板语法学习之后就可以啦&#xff01;&…

【大模型服务】01EdgeFM: Leveraging Foundation Model for Open-set Learning on the Edge

该文发表在 SenSys’23(CCF B) 上&#xff0c;作者是来自港中文的鄢振宇。这是一篇关于云端协同的文章&#xff0c;主要解决边缘设备深度模型的泛化性不足问题&#xff0c;实现 Open-set Learning。 文章目录 背景Open-Set Recognition 的挑战EdgeFM 整体架构图云端&#xff1…

CAPL如何使用socket套接字实现TCP通信(建立连接)

socket套接字相关的文章我们已经写过太多,这里就不再展开。CAPL使用socket实现TCP活UDP通信,在文章《【CANoe示例分析】TCP/UDP Server/Client》也有过介绍,但主要介绍的是工程示例,代码分析比较粗略,今天重点介绍下CAPL代码如何实现socket套接字在TCP通信中的使用。 首先…

21---EEPROM电路设计

视频链接 EEPROM电路设计01_哔哩哔哩_bilibili EEPROM电路设计 1、存储器的分类 一般根据掉电丢失来划分的存储器。可分为易失性存储器和非易失性储存器。 ROM在系统停止供电的时候仍然可以保持数据&#xff0c;而RAM通常都是在掉电之后就丢失数据。 1.1、易失性存储器-R…

383.赎金信

给你两个字符串&#xff1a;ransomNote 和 magazine &#xff0c;判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以&#xff0c;返回 true &#xff1b;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 思路&#xff1a;将magazine 中字…

升级 HarmonyOS 4 版本,腕上智慧更进一步

HUAWEI WATCH GT 3 系列升级 HarmonyOS 4 新版本后&#xff0c;手表体验更进一步&#xff0c;快来看看有哪些变化吧~

如何进行端口映射端口转发?

在互联网时代&#xff0c;网络安全成为一项重要的任务。端口映射端口转发是一种常用的网络安全技术&#xff0c;它可以实现远程访问内部网络资源的需求。本文将介绍端口映射端口转发的基本原理和应用场景&#xff0c;以及一种名为"天联"的解决方案。 基本原理 端口映…

种植新革命:科技赋能绿色未来

《种植新革命&#xff1a;科技赋能绿色未来》 一、种植技术的颠覆式创新 随着科技的飞速发展&#xff0c;种植技术也在经历一场颠覆式的创新。传统的种植方式&#xff0c;虽然历史悠久&#xff0c;经验丰富&#xff0c;但在面对现代化、大规模、高效的需求时&#xff0c;逐渐…

LeetCode每日一题——最后一个单词的长度

最后一个单词的长度OJ链接&#xff1a;58. 最后一个单词的长度 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 思路 &#xff1a; 统计字符串中最后一个单词的长度&#xff0c;那么我们可以定一一个指针&#xff0c;从后向前开始统计&#xff0c;当指针指向的元素…

Nest.js Sequelize ORM到数据库(MySQL PostgreSQL)示例

Nest.js Sequelize ORM到数据库(MySQL & PostgreSQL)示例 目录 Nest.js Sequelize ORM到数据库(MySQL & PostgreSQL)示例您将学到什么先决条件步骤1:创建您的第一个NestJS Sequelize ORM应用步骤2:使用NestJS与MySQL或PostgreSQL构建Sequelize模型步骤3:使用Nes…

【LabVIEW FPGA入门】局部变量和全局变量

局部变量 无法访问某前面板对象或需要在程序框图节点之间传递数据时&#xff0c;可创建前面板对象的局部变量。创建局部变量后&#xff0c;局部变量仅仅出现在程序框图上&#xff0c;而不在前面板上。 局部变量可对前面板上的输入控件或显示件进行数据读写。写入局部变量相当于…

汇编语言中的start有什么用

一 START END 开头有个START 结尾有个END 1.汇编语言中的start有什么用&#xff1f; start就是一个标号,标志程序的入口而已,程序加载到内存之后CS:IP会指向这个标号,从START指向的指令开始运行 这个标号不一定是START,你也可以用MAIN,但在程序的最后要用END MAIN来提示程序…

流畅的 Python 第二版(GPT 重译)(十三)

第二十四章&#xff1a;类元编程 每个人都知道调试比一开始编写程序要困难两倍。所以如果你在编写时尽可能聪明&#xff0c;那么你将如何调试呢&#xff1f; Brian W. Kernighan 和 P. J. Plauger&#xff0c;《编程风格的要素》 类元编程是在运行时创建或自定义类的艺术。在 P…