【栈】224. 基本计算器

2024-02-20 14:52
文章标签 基本 计算器 224

本文主要是介绍【栈】224. 基本计算器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

224. 基本计算器

解题思路

  • 首先将输入的字符串转换为字符队列。
  • 调用 helper() 方法,将字符队列作为参数进行计算。
  • 在 helper() 方法中,创建一个栈来存储中间计算结果,初始化符号为 ‘+’,初始化数字为 0。
  • 循环处理字符队列中的每个字符。
  • 如果当前字符是数字,则将其与之前的数字组合成完整的数字。
  • 如果遇到左括号,则开始递归计算括号内的表达式值。
  • 如果当前字符不是数字且不是空格,或者队列已经为空,则说明遇到了一个完整的数字和一个符号,根据之前记录的符号对数字进行相应的操作,并将结果入栈。
  • 如果遇到右括号,则结束当前递归并返回结果。
  • 最后,计算栈中所有元素的和作为最终结果,并返回。
class Solution {public int calculate(String s) {Queue<Character> queueS = new LinkedList<>();for(char c:s.toCharArray()){queueS.add(c);}return helper(queueS);}private int helper(Queue<Character> s){Stack<Integer> stack = new Stack<Integer>();// 存储中间结果char sign = '+';int num = 0;while(!s.isEmpty()){char c = s.poll();// 出队字符if(Character.isDigit(c)){// 如果是数字 num = num * 10 + Character.getNumericValue(c);}// 遇到左括号开始递归计算numif(c == '('){num = helper(s);}// 如果是运算符或者是空格  或者是字符栈为空if(!Character.isDigit(c) && c != ' ' || s.isEmpty()){if(sign == '+'){stack.push(num);}else if(sign == '-'){stack.push(-num);}else if(sign == '*'){stack.push(stack.pop() * num);// 取出栈顶元素 然后做乘法计算}else if(sign == '/'){stack.push(stack.pop() / num);}num = 0;sign = c;}// 遇到右括号返回递归结果if(c == ')'){break;}}int res = 0;for(int i : stack){res += i;// 计算最后结果}return res;}
}

这篇关于【栈】224. 基本计算器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/728591

相关文章

SQL BETWEEN 语句的基本用法详解

《SQLBETWEEN语句的基本用法详解》SQLBETWEEN语句是一个用于在SQL查询中指定查询条件的重要工具,它允许用户指定一个范围,用于筛选符合特定条件的记录,本文将详细介绍BETWEEN语... 目录概述BETWEEN 语句的基本用法BETWEEN 语句的示例示例 1:查询年龄在 20 到 30 岁

mysql中insert into的基本用法和一些示例

《mysql中insertinto的基本用法和一些示例》INSERTINTO用于向MySQL表插入新行,支持单行/多行及部分列插入,下面给大家介绍mysql中insertinto的基本用法和一些示例... 目录基本语法插入单行数据插入多行数据插入部分列的数据插入默认值注意事项在mysql中,INSERT I

mapstruct中的@Mapper注解的基本用法

《mapstruct中的@Mapper注解的基本用法》在MapStruct中,@Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper),本文给大家介绍ma... 目录1. 基本用法2. 常用属性3. 高级用法4. 注意事项5. 总结6. 编译异常处理在MapSt

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

基于Python开发一个有趣的工作时长计算器

《基于Python开发一个有趣的工作时长计算器》随着远程办公和弹性工作制的兴起,个人及团队对于工作时长的准确统计需求日益增长,本文将使用Python和PyQt5打造一个工作时长计算器,感兴趣的小伙伴可... 目录概述功能介绍界面展示php软件使用步骤说明代码详解1.窗口初始化与布局2.工作时长计算核心逻辑3

MySQL基本查询示例总结

《MySQL基本查询示例总结》:本文主要介绍MySQL基本查询示例总结,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Create插入替换Retrieve(读取)select(确定列)where条件(确定行)null查询order by语句li

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.