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

基本计算器 II

文章目录

    • 题目解析
    • 解题
    • 小结

题目解析

给你一个字符串表达式 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 整数

下面是题目的链接:
基本计算器||

在这里插入图片描述

  • 解析:
    因为给定的是一个字符串s ,所以要想遍历字符串,先要将它转化成一个字符数组。我们要利用栈的性质来进行模拟算术运算,因为只有加减乘除,所以乘除的优先级是高的。先定义一个变量 op 表示运算符,当我们遇到加号和减号时,直接将加号或减号前的数字压入栈中。为了方便最后的计算,当遇到是减号时,压入栈中的数字是负的即可,这样,最后计算时,全部相加在一起就可以了。当我们遇到乘除时,将栈顶元素弹出和下一个数运算即可。还有一点,当遇到不是个位数时,我们需要继续往后遍历,tmp * 10+ss[ i ] 就可以解决这个问题。
    值得注意的是,当遇到空格时,直接 i++ 就可以跳过了。

解题

class Solution {public int calculate(String s) {char op = '+';Stack<Integer> ret = new Stack<>();int n = s.length();char[] ss = s.toCharArray();int i = 0;while (i < n){if (ss[i] == ' '){i++;} else if (ss[i] >= '0' && ss[i] <= '9') {int tmp = 0;while (i < n && ss[i] >= '0' && ss[i] <= '9'){tmp = tmp * 10 + (ss[i] - '0');i++;}if (op == '+'){ret.push(tmp);} else if (op == '-') {ret.push(-tmp);}else if (op == '*'){ret.push(ret.pop()*tmp);}else {ret.push(ret.pop()/tmp);}}else {op = ss[i];i++;}}int sum = 0;while (!ret.isEmpty()){sum += ret.pop();}return sum;}}

在这里插入图片描述

小结

对于这种模拟运算的题,都可以使用栈的优先级特性来进行解决。


http://www.mrgr.cn/news/51631.html

相关文章:

  • stm32启动时用到的systeminit、__main说明
  • 使用IMX6UL实现UART串口通信
  • 网络编程(21)——通过beast库快速实现http服务器
  • Shiro认证
  • 2. MySQL数据库基础
  • 本地typora编辑的.md文件上传到【语雀】->【CSDN】
  • Java-IO流使用场景
  • 4、CSS3笔记
  • 【Web前端概述】
  • mybatis-plus的Iservice接口的save方法,返回true,但是数据库表里却没有看到新记录
  • torchserve在转转GPU推理服务架构下的实践
  • 教学资料管理|基于springBoot的教学资料管理系统设计与实现(附项目源码+论文+数据库)
  • 设置静置情况下getCurrentCalls方法为何一直打印?
  • 25届计算机保研经验贴(中末九保清北及华五人、自动化所、北邮、港中文)
  • 【推导过程】常用连续分布的数学期望、方差、特征函数
  • Python--plt.errorbar学习笔记
  • 多场景多任务建模(三): M2M(Multi-Scenario Multi-Task Meta Learning)
  • H5 Canvas 举牌小人
  • DeepFM模型代码详解
  • rom定制系列------小米6x_澎湃os1.0.28安卓13定制固件修改 刷写过程与界面预览