Leetcode 227. 基本计算器 II

【Leetcode】227.基本计算器II 只包含+、-、*、/和空格的表达式的计算:利用双端队列,遇到运算符时将该运算符前面的数字及当前运算符放入队列中,遇到*和/的时候先对当前的数字进行计算,再和后面的运算符放入队列中 阅读详情

题目

实现一个基本的计算器来计算一个简单的字符串表达式的值。

字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

示例 1:

输入: “3+2*2”
输出: 7

示例 2:

输入: " 3/2 "
输出: 1

示例 3:

输入: " 3+5 / 2 "
输出: 5

说明:

  • 你可以假设所给定的表达式都是有效的。
  • 请不要使用内置的库函数 eval。

解答

思想就是:减当加算,乘除直接算。

要点如下:

  1. 将减法转化为加法(其实就是加负数)。
  2. 乘除法优先级高,直接计算。
  3. 整数可能由多位组成。
  4. 表达式中没有括号,所以优先级顺序不会改变。

减法为什么要当加法算呢?

因为栈的计算过程相当于倒着算,那么前面的减法就相当于 - (后面的运算结果了)。

举个例子:

"1 * 2 - 3 / 4 + 5 * 6 - 7 * 8 + 9 / 10"
输出:
28
预期:
-24

这种情况如果按减法运算相当于这样加括号运算:1 * 2 - ( 3 / 4 + 5 * 6 - ( 7 * 8 + 9 / 10)) 。

解括号之后:1 * 2 - 3 / 4 - 5 * 6 + 7 * 8 - 9 / 10 = 28。

这样运算结果就会出错误了,所以减法最好转化成加相反数的方式来运算。

代码
class Solution {
    public int calculate(String s) {
        LinkedList<Integer> nums = new LinkedList<>();
        int res = 0;
        int d = 0;
        char preSign = '+';
        for(int i = 0; i < s.length(); i ++) {
            char ch = s.charAt(i);
            if(ch >= '0') {
                d = d * 10 + s.charAt(i) - '0';
            } 
            
            if((ch < '0' && ch != ' ') || i == s.length() - 1) {
                if(preSign == '+') {
                    nums.push(d);
                } else if(preSign == '-') {
                    nums.push(-d);
                } else {
                    int temp = preSign == '*' ? nums.peek() * d : nums.peek() / d;
                    nums.pop();
                    nums.push(temp);                    
                }
                
                preSign = ch;
                d = 0;
            }
        }
        
        while(!nums.isEmpty()) {
            res += nums.pop();
        }

        return res;
    }
}
结果

在这里插入图片描述

计算器(java版) 该程序是一款类似与windows自带的计算器的简单版,是用GUI设计的,除了四则运算之外,还有平方,开方,求倒数,求余数的等计算功能,修复一个bug 立即下载

相关推荐

java 实现基本运算的计算器

该程序是基于JAVA实现的计算器,可实现计算器的基本功能,如+,-,*,/等

基本计算器 II(LeetCode第227题)java实现

一、题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格。 整数除法仅保留整数部分。 示例1: 输入: "3+2*2" 输出: 7 示例 2: 输入: " 3/2 " 输出: 1 示例 3: 输入: " 3+5 / 2 " 输出: 5 说明: 你可以假设所给定的表达式都是有效的。 请不要使用内置的库函...

alan_gaohaodong的博客 1498

Seurat 单细胞转录组测序数据分析教程(三)——python(scanpy)

文章参考至,做了一个更详细的解读。本教程探讨了 scanpy 的可视化可能性,分为三个部分:嵌入的散点图(例如 UMAP、t-SNE)使用已知标记基因鉴定簇差异表达基因的可视化在本教程中,我们将使用来自 10x 的数据集,其中包含来自PBMC的 68k 个细胞。Scanpy 在其分布中包括该数据集的简化样本,该数据集仅包含 700 个细胞和 765 个高度可变的基因。该数据集已经过预处理和 UMAP 计算。在本教程中,我们还将使用以下文献标记:B细胞:CD79A、MS4A1。

coffeeii的博客 5827

LeetCode(227):基本计算器 II Basic Calculator II(Java)

2019.9.19 #程序员笔试必备# LeetCode 从零单刷个人笔记整理(持续更新) 这题很容易能够想到借助一个栈来实现,用一个lastSign记录上一个符号。碰上空格,跳过;碰上数字,让上一个数字*10加上这个数字;碰上非数字且lastSign是正负,把当前数字对应的正负值入栈;碰上非数字且lastSign是乘除,把栈顶元素与当前元素做乘除再入栈。最后只需要把栈中元素全部相加即可。 我们...

NJU_ChopinXBP的博客 271

避坑指南:Xilinx SelectIO IP核官方例程里那些容易忽略的细节(复位、时钟与数据回环)

本文深入解析Xilinx SelectIO IP核设计中复位策略、时钟域交互和数据回环验证三大关键领域的实战避坑技巧。针对官方例程中易被忽视的细节,如复位同步链深度、时钟相位约束和数据对齐机制,提供经过项目验证的优化方案,帮助工程师节省80%以上的调试时间。特别适用于FPGA开发中高速接口设计场景。

weixin_42561476的博客 447

GaN制备micro-led(一)

随着第三代半导体 GaN 材料的快速发展,GaN 基 LED 发展迅速并广泛商业化,这 为可见光通信的实现及应用提供了基础。然而,普通商用 LED 的调制带宽只有几十兆 赫兹,并不能很好的满足可见光通信系统高传播速率的需求。为增大调制带宽,针对发 射端 LED 光源部分的改进仍需提高。将光子晶体结构引入 LED 芯片量子阱内部,能够 影响光子寿命和光子传播,进而改变 LED 芯片的调制带宽和光提取效率。结合倒装微 尺寸(Micro)LED 结构,使其封装体积最小化,这使得可见光通信能够更加灵活地.

weixin_45852211的博客 895

java中的计算器_Java中的基本计算器

我正在尝试用Java创建一个基本的计算器.我对编程很陌生,所以我试着习惯它.import java.util.Scanner;import javax.swing.JOptionPane;public class javaCalculator{public static void main(String[] args){int num1;int num2;String operation;Scan...

weixin_39960147的博客 169

在linux上本地大模型部署与推理

您的Python脚本(客户端)可能在您的个人电脑上,而模型服务(服务器)在远程Linux服务器上。如果您的服务器有强大的NVIDIA GPU,并且您对性能有更高的要求(例如需要高吞吐量),vLLM是更好的选择。这种方式无需向公网暴露服务器端口,而是通过加密的SSH通道将服务器的端口“映射”到您的本地电脑上。我们将启动一个API服务器,它会加载您指定的模型,并等待您的代码前来调用。如果您直接在SSH窗口运行上面的命令,一旦您关闭窗口,服务就会停止。这是根据您的原始代码修改的版本,适配本地vLLM服务。

frostmelody 全网同名,大家多多关注呀~ 持续分享优质内容! 2052

力扣第227题“基本计算器 II”

本文详细解读了力扣第227题“基本计算器 II”,通过使用栈的方法高效地解决了这一问题,并提供了详细的解释和模拟面试问答。希望读者通过本文的学习,能够在力扣刷题的过程中更加得心应手。

10年数据\经营分析经验,现任大厂数据分析负责人 914

中国30米逐年植被净初级生产力(NPP)数据集(1982年至今CASA模型)

1.3 气温、降水、地表太阳辐射数据 气温和降水数据月度空间插值数据是基于全国2400多个站点的日观测数据,在计算各气象要素月值的基础上,基于Anusplin软件插值生成的1982年以来各月度30米分辨率气温和降水栅格数据,插值过程中引入高程作为协变量。气温单位为℃,降水单位为mm。1.2 土地覆盖数据 土地覆盖数据来源于1985 年-2020年全球30米精细地表覆盖动态监测产品,该数据集包含29个地表覆盖类型,进行拼接、裁剪、重分类和重采样处理,获得8期250米分辨率的植被类型数据。

地球资源数据云的官方博客 2839

手把手教你用TUSB2E22中继器实现eUSB2与USB 2.0互转(附实测数据对比)

本文详细介绍了如何利用TUSB2E22中继器实现eUSB2与USB 2.0的高效互转,包括技术背景、硬件设计要点、信号完整性测试方法及故障排查策略。通过实测数据对比,展示了TUSB2E22在信号延迟、功耗和眼图性能上的显著优势,为工程师提供了实用的工程方案。

weixin_29199873的博客 282

LeetCode第227题_基本计算器II

LeetCode第227题要求实现一个基本计算器,支持加减乘除运算,且整数除法仅保留整数部分。题目给出的字符串表达式包含整数、运算符和空格,且表达式有效。解题思路是使用栈来处理运算符的优先级,具体步骤如下: 遍历字符串,提取数字并处理多位数。 遇到运算符或字符串末尾时,根据上一个运算符的类型进行相应处理: +:将当前数字入栈。 -:将当前数字的相反数入栈。 *:将栈顶元素出栈,乘以当前数字,再将结果入栈。 /:将栈顶元素出栈,除以当前数字,再将结果入栈。 重置当前数字为0,记录当前的运算符。 遍历完

qq_40263592的博客 879

ABA分析方法 — 软硬件开发必备的一种分析问题绝佳套路

可能你从很多地方听过这个名词,无论是在软件开发还是硬件领域(比较典型的领域:汽车、消费电子、医疗等行业),ABA验证都是一种快速分析故障的一个方法,第一次听到这个词,当时是不是一脸懵逼,本文就深度带你了解下ABA的分析方法。简要概述就是:怀疑A模块导致系统故障,将B模块替换A模块,故障消失,再将A模块替换回来,故障复现,则说明A模块是导致系统故障的原因其实,ABA分析问题,可能很多人在工作中都或多或少用过这个方法,只是没有这个概念,说明白了就是控制变量和对比验证,没什么高大上的东西。

Eureka1024的博客 7321

LeetCode227——基本计算器II

力扣227:基本计算器II 原题链接 题目描述: 给定有效字符串s,实现基本计算器来计算并返回其值?其中除法仅保留整数部分。 Example Input s = " 3-5 / 2 " Output 1 官方题解的思路比较简单,通俗来讲就是在每个表达式前加一个符号“+”,然后根据每个数字的前置符号位计算结果,如果是"+"或者"-",则直接添加,如果是乘除则从栈中pop末尾,实现优先运算。 举例说明: s = " 3-5 / 2 ",首先去除空格,可以另起一个新循环进行预处理,也可以直接在主循环中操作

KH的博客 248

立创开源桌面激光雕刻机DIY全解析:从悬臂结构、Arduino主控到Marlin固件

本文详细解析了基于立创开源平台的桌面激光雕刻机DIY全过程。重点介绍了悬臂式机械结构的设计与优化,阐述了采用Arduino Mega 2560主控与RAMPS 1.4扩展板的经典控制方案,并深入讲解了Marlin固件的关键配置步骤,包括电机步数计算与激光功能启用,为创客和电子爱好者提供了一套完整的从硬件搭建到软件调试的实战指南。

weixin_42510201的博客 382

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

栈-227.基本计算器II-力扣(LeetCode)

一个栈用于存储数字,一个栈用于存储运算符,当两个栈都为空的时候,得到最终结果;为了出现字符栈已空,而数字栈未空,可以先在字符栈内加入‘+’,或者最后特殊他处理中缀表达式就是类似题目所提供的字符串“3+2*2”," 2+3 / 5"," 2-4*5"等等,后缀表达式则是将运算按优先级排序"3 + 2 2 * ","2 + 3 5 / ","2 - 4 5 * "等等,如果有机会后面会详细讲解一下这里的优化只是一个小优化,由题可知只有'+','-','*','/'这四个运算符,我们可以知道优先级,所以故将字符栈

black_bear_white的博客 550

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

【LeetCode】227、基本计算器 II

【代码】【LeetCode】227、基本计算器 II。

呆呆的猫的博客 620

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Leetcode 227. 基本计算器 II

这个题的解析用到了好多我不熟悉的函数。

JehanRio's Private Blog 354

【LeetCode: 227. 基本计算器 II + 栈】

【LeetCode: 227. 基本计算器 II + 栈】给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。

Coder_ljw的博客 1199

Leetcode 227. 基本计算器 II C++

Leetcode 227. 基本计算器 II 题目 实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。 测试样例 示例 1: 输入: "3+2*2" 输出: 7 示例 2: 输入: " 3/2 " 输出: 1 示例 3: 输入: " 3+5 / 2 " 输出: 5 说明: 你可以假设所给定的表达式都是有效的。 请不要使用内置的库函数 eval。 题解 利用栈 如果符号栈顶的优先级大,则进行运算,否

weixin_43750513的博客 306

[LeetCode]227. 基本计算器 II

参考了评论区ID“这个昵称不太火”的思路。 分为三步 取数值和运算符; 处理乘除法(优先运算); 处理加减法。 227. 基本计算器 II class Solution { public: int calculate(string s) { int tip=s.size(); vector<int> num; vector&l...

weixin_39947473的博客 132

LeetCode 227. 基本计算器 II

给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值。整数除法仅保留整数部分。你可以假设给定的表达式总是有效的。所有中间结果将在的范围内。不允许使用任何将字符串作为数学表达式计算的内置函数,比如eval()。715s。

m0_56090828的博客 597

LeetCode 227. 基本计算器 II(Basic Calculator II)

227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值。 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和空格。整数除法仅保留整数部分。 LeetCode227. Basic Calculator II中等 示例1: 输入: "3+2*2" 输出: 7 示例 2: 输入: " 3/2 " 输出: 1 示...

weixin_30235225的博客 149

【LeetCode】227. Basic Calculator II 基本计算器 II(Medium)(JAVA)

【LeetCode】227. Basic Calculator II 基本计算器 II(Medium)(JAVA) 题目地址: https://leetcode.com/problems/basic-calculator-ii/ 题目描述: Given a string s which represents an expression, evaluate this expression and return its value. The integer division should truncate to

qq_16927853的博客 287

[每日一题]Leetcode227. 基本计算器 II

今天的每日一题是Leetcode227. 基本计算器 II,题意如下: 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 1 <= s.length <= 3 * 105 s 由整数和算符 (’+’, ‘-’, ‘*’, ‘/’) 组成,中间由一些空格隔开 s 表示一个 有效表达式 表达式中的所有整数都是非负整数,且在范围 [0, 231 - 1] 内 题目数据保证答案是一个 32-bit 整数 这道题是昨天的进阶版,但是这道题少了括号,多了乘

qq_43695986的博客 625
上一篇: Leetcode 165. 比较版本号
下一篇: Leetcode 94. 二叉树的中序遍历
一纸浮萍
博客等级 码龄9年 11粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值