力扣经典150题第五十三题:基本计算器
目录
- 力扣经典150题第五十六题:基本计算器
- 示例
- 提示
- 解题思路
力扣经典150题第五十六题:基本计算器
给你一个字符串表达式 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 * 10^5
- s 由数字、‘+’、‘-’、‘(’、‘)’、和 ’ ’ 组成
- s 表示一个有效的表达式
- ‘+’ 不能用作一元运算(例如, “+1” 和 “+(2 + 3)” 无效)
- ‘-’ 可以用作一元运算(即 “-1” 和 “-(2 + 3)” 是有效的)
- 输入中不存在两个连续的操作符
- 每个数字和运行的计算将适合于一个有符号的 32位 整数
解题思路
在进行表达式计算时,我们可以使用栈来保存数字和运算符,并在遇到右括号时进行计算。具体步骤如下:
- 初始化一个栈
stack
用于保存数字和运算符,一个变量sign
用于保存当前运算的符号,默认为1。 - 遍历字符串
s
,遇到以下情况进行处理:- 遇到数字字符时,将其转换为数字并添加到当前数字
num
上。 - 遇到 ‘+’ 符号时,将
sign
设为1。 - 遇到 ‘-’ 符号时,将
sign
设为-1。 - 遇到 ‘(’ 符号时,将当前数字
num
和运算符sign
入栈,并分别重新置为1。 - 遇到 ‘)’ 符号时,从栈中弹出前一个数字和运算符,进行运算,并将结果加到弹出的数字上。
- 遇到空格时,跳过处理。
- 遇到数字字符时,将其转换为数字并添加到当前数字
- 最后将栈中的所有数字相加得到结果。
以下是Java代码示例:
import java.util.Stack;public class BasicCalculator {public int calculate(String s) {Stack<Integer> stack = new Stack<>();int num = 0;int sign = 1;int result = 0;for (int i = 0; i < s.length(); i++) {char c = s.charAt(i);if (Character.isDigit(c)) {num = num * 10 + (c - '0');} else if (c == '+') {result += sign * num;num = 0;sign = 1;} else if (c == '-') {result += sign * num;num = 0;sign = -1;} else if (c == '(') {stack.push(result);stack.push(sign);result = 0;sign = 1;} else if (c == ')') {result += sign * num;num = 0;result *= stack.pop();result += stack.pop();}}result += sign * num;return result;}public static void main(String[] args) {BasicCalculator calculator = new BasicCalculator();String s1 = "1 + 1";String s2 = " 2-1 + 2 ";String s3 = "(1+(4+5+2)-3)+(6+8)";System.out.println(calculator.calculate(s1)); // 输出:2System.out.println(calculator.calculate(s2)); // 输出:3System.out.println(calculator.calculate(s3)); // 输出:23}
}
此代码实现了基本计算器功能,通过栈来处理运算优先级,遇到括号时递归计算括号内的表达式。
相关文章:
力扣经典150题第五十三题:基本计算器
目录 力扣经典150题第五十六题:基本计算器示例提示解题思路 力扣经典150题第五十六题:基本计算器 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 注意:不允许使用任何将字符串作为数学表达式计算的内置函数…...
如何为 Nestjs 编写单元测试和 E2E 测试
前言 最近在给一个 nestjs 项目写单元测试(Unit Testing)和 e2e 测试(End-to-End Testing,端到端测试,简称 e2e 测试),这是我第一次给后端项目写测试,发现和之前给前端项目写测试还…...
基于Python的LSTM网络实现单特征预测回归任务(TensorFlow)
单特征:数据集中只包含2列,时间列价格列,仅利用价格来预测价格 目录 一、数据集 二、任务目标 三、代码实现 1、从本地路径中读取数据文件 2、数据归一化 3、创建配置类,将LSTM的各个超参数声明为变量,便于后续…...
Spring - 8 ( 10000 字 Spring 入门级教程 )
一: MyBatis 1.1 引入 MyBatis 我们学习 MySQL 数据库时,已经学习了 JDBC 来操作数据库, 但是 JDBC 操作太复杂了. 我们先来回顾⼀下 JDBC 的操作流程: 创建数据库连接池 DataSource通过 DataSource 获取数据库连接 Connection编写要执行带 ? 占位符…...
鸿蒙内核源码分析(忍者ninja篇) | 都忍者了能不快吗
ninja | 忍者 ninja是一个叫 Evan Martin的谷歌工程师开源的一个自定义的构建系统,最早是用于 chrome的构建,Martin给它取名 ninja(忍者)的原因是因为它strikes quickly(快速出击).这是忍者的特点,可惜Martin不了解中国文化,不然叫小李飞刀更合适些.究竟有多块呢? 用Martin自…...
Linux——守护进程化(独立于用户会话的进程)
目录 前言 一、进程组ID与会话ID 二、setsid() 创建新会话 三、daemon 守护进程 前言 在之前,我们学习过socket编程中的udp通信与tcp通信,但是当时我们服务器启动的时候,都是以前台进程的方式启动的,这样很不优雅,…...
安卓开发--按键跳转页面,按键按下变色
前面已经介绍了一个空白按键工程的建立以及响应方式,可以参考这里:安卓开发–新建工程,新建虚拟手机,按键事件响应。 安卓开发是页面跳转是基础!!!所以本篇博客介绍利用按键实现页面跳转&#…...
Ps基础学习笔记
Ps基础学习笔记 Adobe Photoshop(简称Ps)是一款非常流行的图像处理软件,被广泛应用于图像编辑、修饰和设计等领域。作为一名初学者,了解Ps的基础知识是非常重要的,本文将介绍Ps的基本操作和常用工具,帮助你…...
spring开发问题总结(持续更新)
开始 最近在做项目的时候,总遇到一些大小不一,奇形怪状的问题。 现在终于有时间来总结一下遇到的问题,以备复习之用。 以下提到的问题经过简化,不代表任何项目代码或问题。 问题1:未完成任务状态搜索结果有误&#x…...
Android 状态栏WiFi图标的显示逻辑
1. 状态栏信号图标 1.1 WIFI信号显示 WIFI信号在状态栏的显示如下图所示 当WiFi状态为关闭时,状态栏不会有任何显示。当WiFi状态打开时,会如上图所示,左侧表示有可用WiFi,右侧表示当前WiFi打开但未连接。 当WiFi状态连接时&#x…...
更改 DeepXDE 的后端
DeepXDE 库为科学计算和工程优化等领域提供了深度学习方法,是一个非常有用的工具。其中一个重要的功能是它允许用户自定义后端。在本文中,我们将指导如何更改 DeepXDE 的后端,并且验证更改是否成功。 更改 DeepXDE 的后端 DeepXDE 支持多种…...
SpringBoot之Zuul服务
概述 Spring Cloud Netflix zuul组件是微服务架构中的网关组件,Zuul作为统一网关,是所有访问该平台的请求入口,核心功能是路由和过滤。 目前公司业务就是基于Zuul搭建的网关服务,且提供的服务包括转发请求(路由)、黑名单IP访问拦截、URL资源访问时的权限拦截、统一访问日志记…...
Go-变量
可以理解为一个昵称 以后这个昵称就代指这些信息 var sg string "czy" 声明赋值 package mainimport "fmt"func main() {var sg string "陈政洋"fmt.Println(sg)var age int 73fmt.Println(age)var flag bool truefmt.Println(flag) } …...
【CTF-Crypto】RSA-选择明密文攻击 一文通
RSA:选择明密文攻击 关于选择明/密文攻击,其实这一般是打一套组合拳的,在网上找到了利用的思路,感觉下面这个题目是真正将这个问题实现了,所以还是非常棒的一道题,下面先了解一下该知识点:(来自…...
Pytorch基础:torch.expand() 和 torch.repeat()
在torch中,如果要改变某一个tensor的维度,可以利用view、expand、repeat、transpose和permute等方法,这里对这些方法的一些容易混淆的地方做个总结。 expand和repeat函数是pytorch中常用于进行张量数据复制和维度扩展的函数,但其…...
如何正确安装Scrapy 2.6.1并解决常见的Python环境问题
在配置Python环境和安装包时,常常会遇到版本冲突和路径问题,特别是当系统中存在多个Python版本时。本文将指导你如何在CentOS系统中正确使用pip3安装Scrapy 2.6.1,并解决一些常见的环境问题。 步骤1: 确认和升级 pip3 确认 pip3 的版本&…...
阵痛中的乳业产业,何时才能成为下一个啤酒产业?
说起饮品,近年来中国啤酒业中各大品牌齐齐聚焦高端化的趋势绝对值得一提。然而,与之相反,国内乳业却是仍未进入高端化阶段,甚至陷入了周期底部中。 图源:中国圣牧财报 增收降利 牧企承受巨大的供需缺口压力 从产业链…...
关于模型参数融合的思考
模型参数融合通常指的是在训练过程中或训练完成后将不同模型的参数以某种方式结合起来,以期望得到更好的性能。这种融合可以在不同的层面上进行,例如在神经网络的不同层之间,或者是在完全不同的模型之间。模型参数融合的目的是结合不同模型的…...
Windows MySQL本地服务器设置并导入数据库和数据
文章目录 小结问题及解决导出数据库Windows MySQL本地服务器设置导入数据库和数据 参考 小结 最近需要在本地Windows环境中设置MySQL服务器,并导入数据库和数据,记录过程。 问题及解决 导出数据库 首先需要导出数据库: C:\mysql-8.0.37-…...
豪投巨资,澳大利亚在追逐海市蜃楼吗?
澳大利亚政府正在积极投资于量子计算领域。继2021年向量子技术投资逾1亿澳元后,2023年5月,该国发布了首个国家量子战略,详细阐述了如何把握量子技术的未来及保持全球领先地位。 澳大利亚的国家量子战略概述 原文链接: https://ww…...
面试集中营—Redis架构篇
一、Redis到底是多线程还是单线程 1、redis6.0版本之前的单线程,是指网络请求I/O与数据的读写是由一个线程完成的; 2、redis6.0版本升级成了多线程,指的是在网络请求I/O阶段应用的多线程技术;而键值对的读写还是由单线程完成的。所…...
05_kafka-整合springboot
文章目录 kafka 整合 springboot pom.xml <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version> </parent> <dependencies>&…...
论UML在学情精准测评系统中的应用
摘要简介 项目背景: 随着教育改革的不断深入,对学生学情的精准测评成为教育教学工作中的重要环节。为了解决传统学情测评方式主观性强、效率低、反馈不及时等问题,我们团队受教育主管部门委托,承担了中小学学情精准测评系统&…...
Day23 代码随想录打卡|字符串篇---重复的子字符串
题目(leecode T459): 给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。给定的字符串只含有小写英文字母,并且长度不超过10000。fang 移动匹配。分析可以由自己的子串构成的字符串,肯…...
【win10 文件夹数量和看到不一致查看隐藏文件已经打开,Thumb文件作妖】
目录 任务介绍:重命名规则修改前修改后 实现思路VB代码实现BUG犯罪现场(眼见不一定为实)破案1:抓顶风作案的反贼!!!破案2:破隐身抓刺客!!!杀器&am…...
ctfshow web入门 sql注入 web224--web233
web224 扫描后台,发现robots.txt,访问发现/pwdreset.php ,再访问可以重置密码 ,登录之后发现上传文件 检查发现没有限制诶 上传txt,png,zip发现文件错误了 后面知道群里有个文件能上传 <? _$GET[1]_?>就是0x3c3f3d60245…...
「Java开发指南」如何用MyEclipse搭建GWT 2.1和Spring?(一)
本教程将指导您如何生成一个可运行的Google Web Toolkit (GWT) 2.1和Spring应用程序,该应用程序为域模型实现了CRUD应用程序模式。在本教程中,您将学习如何: 安装Google Eclipse插件为GWT配置一个项目搭建从数据库表到一个现有的项目GWT编译…...
python同时进行字符串的多种替换
一些常见的方法: 使用str.replace()方法:这是一种简单的方法,但是如果你有多个替换需要进行,可能会变得很繁琐。 text "This is a sample text with some words." text text.replace("sample", "exa…...
【Java基础题型】用筛法求之N内的素数(老题型)
输入格式 N输出格式 0~N的素数样例输入 100样例输出 2 3 5 7 11 13 17 19 23 29 31 37 老朋友素数了属于是! 方法1:(穷举法) 通过遍历 i 的所有除数,如果除以除数后商变成了0,那么把布尔值变成假的。表示不是素数 【…...
Linux进程——Linux环境变量
前言:在结束完上一篇的命令行参数时,我们简单的了解了一下Linux中的环境变量PATH,而环境变量不只有PATH,关于更多环境变量的知识我们将在本篇展开! 本篇主要内容: 常见的环境变量 获取环境变量的三种方式 本…...
做网站 怎么选择公司/2022真实新闻作文400字
最近看Google图书,令人感到困惑的无非是无法自由的地下载其图片。以至于网上充斥着Google图书下载器。查看源代码,着实让人困惑不已。还好有IE Developer Tools,才大致将其UI结构搞的一知半解。至于图片的下载这倒是需要在仔细研究下。顺便做…...
商城网站建设哪家好/优化网络推广外包
linux中通过date命令获取昨天或明天时间的方法date命令可以获取当前的时间,通过man,可以看到date有很多参数可以用,很容易做到格式化date "%F"输出格式:2011-12-31 date "%F %H:%M:%S"输出格式:20…...
海口小程序开发/正规seo关键词排名网络公司
文章目录公共字段自动填充问题分析基本功能实现思路分析代码实现功能测试功能完善思路分析ThreadLocal操作步骤代码实现功能测试思维导图总结新增分类需求分析数据模型前端页面分析代码实现功能测试分类信息分页查询需求分析前端页面分析代码实现功能测试思维导图总结删除分类需…...
wordpress app应用/上海网站排名优化
没有学习过红黑树的同学请参考: <<Introduction to Algorithms>> Chapter 13 Red-Black Trees Chapter 14 Augmenting Data Structures 教你透彻了解红黑树 一、红黑树的介绍 先来看下算法导论对R-B Tree的介绍:红黑树,一种二叉…...
福州做网站建设服务商/互联网营销师证书怎么考多少钱
大数据预计市场将在2020美元之间达到2030亿美元,迄今取得的进展与预测完全同步。虽然现在的企业正努力在这些高度竞争的环境中巩固自己的地位,但新兴技术最终赢得了他们应有的利益,并且正在逐渐地发挥自己的潜力。营销一直是一个灵活的领域&a…...
wordpress摘要字数的插件/深圳市前十的互联网推广公司
原文地址:http://ec.zdnet.com.cn/managesoft/2009/1104/1503211.shtml 凡是比较或者评测的文章,必然会得到很多的非议,因为每个人的标准都不一样,而且本人也不可能对每个系统都研究透彻。本文整理了18家比较常见的OA产品…...