leetcode 227. 基本计算器 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 整数

代码

class Solution {  String s;  int i = 0;  ArrayList<Integer> numbers = new ArrayList<>();  ArrayList<Character> operator = new ArrayList<>();  public int calculate(String s) {  this.s = s;  long sum = 0;  for (; i < s.length(); i++) {  char ch = s.charAt(i);  if (ch == '*') {  while (s.charAt(++i) == ' ');  numbers.add(numbers.get(numbers.size() - 1) * nextNumber());  numbers.remove(numbers.size() - 2);  } else if (ch == '/') {  while (s.charAt(++i) == ' ');  numbers.add(numbers.get(numbers.size() - 1) / nextNumber());  numbers.remove(numbers.size() - 2);  } else if (ch == '+' || ch == '-') {  operator.add(ch);  } else if (Character.isDigit(ch)){  numbers.add(nextNumber());  }  }  int index = 0;  sum = numbers.get(index++);  for (;index < numbers.size(); index++) {  if (operator.get(index - 1) == '+') {  sum += numbers.get(index);  } else {  sum -= numbers.get(index);  }  }  return (int) sum;  }  private int nextNumber() {  int num = s.charAt(i) - '0';  while (i + 1 < s.length() && Character.isDigit(s.charAt(i + 1)))  num = num * 10 + s.charAt(++i) - '0';  return num;  }  
}

题解

此题很容易想到用栈来解 但我第一想法并不用栈
我的想法是先把 * 和 / 运算全都计算出来
在顺序进行加减法
此题有诸多细节问题, 下面将一一列举

  1. 整数的读取
    我们需要将连在一起的个数字都读取到一块
private int nextNumber() {  int num = s.charAt(i) - '0';  while (i + 1 < s.length() && Character.isDigit(s.charAt(i + 1)))  num = num * 10 + s.charAt(++i) - '0';  return num;  
}
  1. 空格的处理
    在处理 * 或 / 下一个数字时会存在遇到空格的情况
while (s.charAt(++i) == ' ');  
  1. 当经行了一次乘除计算之后需要把指针后移
numbers.remove(numbers.size() - 2); 

具体代码参上

好的!本次分享到这就结束了
如果对铁汁你有帮助的话,记得点赞👍+收藏⭐️+关注➕
我在这先行拜谢了:)

原题链接

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

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

相关文章

win10安全中心误删文件怎么办?解析恢复与预防策略

在使用Windows 10的过程中&#xff0c;许多用户依赖于其内置的安全中心来保护电脑免受恶意软件的侵害。然而&#xff0c;有时安全中心的误判可能导致重要文件被错误地删除。当面对这种情况时&#xff0c;了解如何恢复误删的文件并掌握预防措施显得尤为重要。本文将为您详细解析…

java常用技术栈,java面试带答案

前言 我们从一个问题引入今天的主题。 在日常业务开发中&#xff0c;我们可能经常听到 DBA 对我们说“不要”&#xff08;注意&#xff1a;不是禁止&#xff09;使用 join&#xff0c;那么为什么 DBA 对 join 这么抵触呢&#xff1f;是 join 本身有问题&#xff0c;还是我们使…

【weblogic 报错 application webapp does not have any Components in it.】

当你启动你的web时&#xff0c;报错weblogic 报错 application webapp does not have any Components in it. 检查你的startWeblogic.sh 看一下你的项目路径是否正确。

G1018选择排序

题目描述 完善程序&#xff1a; 输入N个整数&#xff0c;使用选择排序法从小到大输出。 #include<bits/stdc.h> using namespace std; int N; int a[100010]; int main() {freopen("1455.in","r",stdin);freopen("1455.out","w&quo…

私募证券基金动态-24年2月报

成交量&#xff1a;2月日均9492.60亿元 2024年2月A股两市日均成交9492.60亿元&#xff0c;环比增加30.38%、同比增加5.77%。2月整体15个交易日&#xff0c;有4个单日交易日成交金额过万亿&#xff0c;单日交易日最高成交金额为13576.43亿元&#xff08;2月28日&#xff09;&am…

MySQL 学习笔记(基础篇 Day1)

「写在前面」 本文为黑马程序员 MySQL 教程的学习笔记。本着自己学习、分享他人的态度&#xff0c;分享学习笔记&#xff0c;希望能对大家有所帮助。 目录 0 课程介绍 1 MySQL 概述 1.1 数据库相关概念 1.2 MySQL 数据库 2 SQL 2.1 SQL 通用语法 2.2 SQL 分类 2.3 DDL 2.4 图形…

【leetcode C++】电话号码的字母组合

17. 电话号码的字母组合 题目 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 题目链接 . - 力扣&#xff08;LeetCode&…

1.类和对象-友元

文章目录 1.全局函数做友元代码运行结果 2.类做友元代码运行结果 1.全局函数做友元 思路分析&#xff1a; 正常情况下&#xff0c;全局函数visit()中的ROOM 类变量r是访问不到Building类中的私有成员的。但是通过在Building类中添加使用全局函数做友元&#xff0c;即可访问私有…

什么是ElasticSearch的深度分页问题?如何解决?

在ElasticSearch中进行分页查询通常使用from和size参数。当我们对ElasticSearch发起一个带有分页参数的查询(如使用from和size参数)时,ElasticSearch需要遍历所以匹配的文档直到达到指定的起始点(from),然后返回从这一点开始的size个文档 在这个例子中: 1.from 参数定义…

ThreadLocal通俗解读,举个例子?

ThreadLocal 解读 ThreadLocal 是 Java 中一个用来创建线程局部变量的类。它为每个使用该变量的线程提供独立的变量副本 线程局部变量意味着对于同一个 ThreadLocal 实例&#xff0c;在不同的线程中访问到的值是不同的&#xff0c;每个线程都有自己的变量副本。这样可以在多线…

代码学习记录13

随想录日记part13 t i m e &#xff1a; time&#xff1a; time&#xff1a; 2024.03.06 主要内容&#xff1a;今天的主要内容是二叉树的第二部分哦&#xff0c;主要有层序遍历&#xff1b;翻转二叉树&#xff1b;对称二叉树。 102.二叉树的层序遍历226.翻转二叉树101. 对称二叉…

MySQL用户创建和权限分配

MySQL用户创建和权限分配 用户创建 查看用户 select user,host from user; 创建用户 create user ‘用户名’ ‘host’ identified by 密码’; 删除用户 drop user ‘用户名’ ‘host’; 更新host update user set host ‘%’ where user 用户名‘&#xff1b; 权限分配 查…

逢7过,从任意一个数字开始报数,当你要报的数字包含7或者是7的倍数时都要说:过(1~100之间满足逢7必过规则的数据)

分析&#xff1a;这题就是碰到 7是个位&#xff0c;7是十位&#xff0c;7的倍数 就要过 // 1 2 3 4 5 6 过 8 9 10 11 12 13 过 14 15 16 过 18 19 20 过。。 69 过 过 过 过 过 。。80.。。 判断每个数字&#xff0c;如果符合条件&#xff0c;就打印过&#xff0c;如果不符…

2024中国重庆沐浴博览会5月29日-31日

2024中国沐浴展——世界级温泉胜地&#xff0c;引领健康产业新风向 2024第五届中国沐浴健康产业&#xff08;重庆&#xff09;博览会暨第十一届中国沐浴温泉文化节 ——世界级温泉胜地&#xff0c;引领健康产业新风向 随着人们生活水平的提高和健康意识的增强&#xff0c;沐…

LeetCode-第67题-二进制求和

1.题目描述 给你两个二进制字符串 a 和 b &#xff0c;以二进制字符串的形式返回它们的和。 2.样例描述 3.思路描述 将两个二进制字符串转换成整型&#xff0c;然后相加后的整型转为二进制字符串 4.代码展示 class Solution(object):def addBinary(self, a, b):# 将字符串…

AI新工具(20240306) mlx-swift-chat Mac运行本地模型;Comflowyspace开源AI图像和视频生成工具

1: mlx-swift-chat 专为 Apple 硅片设计的高效机器学习框架&#xff0c;支持在本地实时运行 LLM 模型&#xff08;如 Llama、Mistral&#xff09; mlx-swift-chat 是一个为苹果系统&#xff08;例如你的笔记本电脑上的Apple Silicon&#xff09;特别设计的机器学习框架 MLX 的…

计划任务和日志

一、计划任务 计划任务概念解析 在Linux操作系统中&#xff0c;除了用户即时执行的命令操作以外&#xff0c;还可以配置在指定的时间、指定的日期执行预先计划好的系统管理任务&#xff08;如定期备份、定期采集监测数据&#xff09;。RHEL6系统中默认已安装了at、crontab软件…

前端如何实现高度的自动过渡

主要是利用了浏览器的渲染机制。 <!doctype html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport"content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, mini…

linux系统elk组件kibana部署

Kibana部署 Kibana部署安装配置Kibana安装配置启动 安装配置Nginx反向代理配置YUM源&#xff1a;安装&#xff1a;配置反向代理 配置授权用户和密码启动nginx Kibana部署 安装配置Kibana 安装 tar zxf kibana-7.13.2-linux-x86_64.tar.gz -C /usr/local/配置 echo server.…

扫码看图的预览效果怎么做?图片的二维码如何在线生成?

图片二维码是现在很常用的一种预览图片的方式&#xff0c;比如照片、海报、动态图、拍摄的图片等类型的内容都可以用二维码的方式在手机上预览。在制作图片二维码时候&#xff0c;现在大多会通过网上的图片二维码生成器来制作&#xff0c;直接用专业的功能&#xff0c;就可以快…