LeetCode227. Basic Calculator II

BDD测试之Behave使用入门 BDD测试(Behavior-Driven Development Testing)是一种基于“行为驱动开发”(BDD)理念。 阅读详情
题目链接:

https://leetcode.com/problems/basic-calculator-ii/

题目描述:

计算字符串表达式的值。可能会有多余空格。

题目分析:

这道题对于我来说坑略多啊。字符串表达式中的数字可能为多位数。比如
345*16,第一次就跪这上面了,我没注意这个问题,以为只有个位。
这样解决就好。

while (i < len && s[i] >= '0' && s[i] <= '9'){
        num = num * 10 + (s[i] - '0');
        i++;
}

我最开始想的是当即将加入操作符栈的运算符优先级小于栈顶运算符优先级,就将操作数栈弹出两个数先与操作符栈的栈顶运算符运算,直到栈顶运算符优先级与即将入栈的运算符优先级相同。

其实不用这么麻烦啊 ╮(╯_╰)╭。
我在遍历的时候直接先把乘除算了啊,之后再算一次加减就好了啊。
在新数字加入操作数栈前,看看操作符栈的栈顶运算符是不是乘除,如果是就计算后,再加入。

最后算加减的时候,简直被自己蠢哭了。

while (OPD.size() >= 2 && !OPR.empty()){
        char ch = OPR.top();
        OPR.pop();
        int num1 = OPD.top();
        OPD.pop();
        int num2 = OPD.top();
        OPD.pop();
        num1 = calculate(num1, num2, ch);
        OPD.push(num1);
    }
    return OPD.top();

怎么能这样算呢,加入栈后,是反起来的了。
比如0-2 是为-2,此时操作数栈中栈顶是2,如果按我的代码来就是2-0=2,蠢哭啊。

正确的应该是:

int res=0;
        while (!OPR.empty()){
            int tmp=OPD.top();
            char ch=OPR.top();
            if(ch=='-'){
                tmp=-tmp;
            }
            res+=tmp;
            OPD.pop();
            OPR.pop();
        }
        res+=OPD.top();
        return res;

十分感谢

http://blog.youkuaiyun.com/brucehb/article/details/46593913

class Solution {
public:
    stack<int> OPD;
    stack<char> OPR;
    int calculate(int num1, int num2, char opr){
        switch (opr){
        case '+':{
                     return num1 + num2;
        }
        case '-':{
                     return num1 - num2;
        }
        case '*':{
                     return num1*num2;
        }
        case '/':{
                     return num1 / num2;
        }
        }
    }
    int calculate(string s) {
        int len = s.size();
        int i=0;
        while(i<len){
            if (s[i] == ' '){
                i++;
            }
            else if (s[i] == '+' || s[i] == '-' || s[i]=='*' || s[i]=='/'){
                OPR.push(s[i]);
                i++;
            }
            else{
                int num = 0;
                while (i < len && s[i] >= '0' && s[i] <= '9'){
                    num = num * 10 + (s[i] - '0');
                    i++;
                }
                if (!OPR.empty() && (OPR.top()=='/' || OPR.top()=='*')){
                    num = calculate(OPD.top(),num,OPR.top());
                    OPR.pop();
                    OPD.pop();
                }
                OPD.push(num);
            }
        }
        int res=0;
        while (!OPR.empty()){
            int tmp=OPD.top();
            char ch=OPR.top();
            if(ch=='-'){
                tmp=-tmp;
            }
            res+=tmp;
            OPD.pop();
            OPR.pop();
        }
        res+=OPD.top();
        return res;
    }
};
增量式PID的P和I怎么理解(一) 增量式PID的P、I理解之推翻片 据我所知的资料里关于PID三个参数的理解是这样的:(我这里只说P和I,先不说D) P的作用:比例P可以加快系统调节速度,P过小调节时间变长,响应性不够,P越大响应性越高超调也越严重,过大的P会使系统振荡。 I的作用:消除静差,提高控制精度,I越大越滞后,过大会使系统振荡。 ... 阅读详情

相关推荐

基础的pdf病毒木马

基础的pdf病毒木马 环境: 攻击机:Kali 目标操作系统:Windows 10或Windows 7 (关闭防火墙和安全软件) 目标软件:Adobe Reader 8.1.2 msf框架搜索:adobe-pdf 1.打开msfconsole 2.搜索 adobe_pdf模块 3.加载攻击模块并设置payload 4.运行生成pdf 5.将pdf拖入到win10 6.打开msf,加...

小小猪的博客 4623

LeetCode 227. 基本计算器 II

227. 基本计算器 II 【双栈】定义两个栈nums和ops分别存数字和操作符,定义一个计算函数,传入当前的操作符,计算所有优先级>=该操作符的表达式。1.预处理:replace掉所有的空格,在字符串前加个0,防止不讲武德上来就给个负数。2.如果遇到数字,通过t*10+c-‘0’计算值3.如果遇到'('直接插入ops4.如果遇到')'则计算到前面出现'('5.其他操作符,计算前面优先级比他高或者和他相同的...

Sasakihaise_的博客 2874

AI办公Agent技术:文档与表格智能处理实践

办公自动化技术正从规则驱动转向语义理解,大语言模型(LLM)为办公Agent赋予了智能决策能力。这类系统通过五层架构整合自然语言处理、工具API调用和任务规划引擎,能自动完成文档分类、表格分析等高重复性工作。关键技术包括基于TF-IDF和BERT的特征提取、Excel公式自动生成等,在财务报告、法律审查等场景可实现90%以上的效率提升。随着多模态能力和领域专业化发展,办公Agent正在重塑企业文档处理流程,成为数字化转型的核心基础设施。

weixin_30263277的博客 519

【LeetCode】227. 基本计算器 II

day210,双栈解法

weixin_43894455的博客 645

银河麒麟v10-arm版离线安装Portainer

银河麒麟v10-arm版离线安装Portainer

q_hsolucky的博客 3050

玩转 InternVL3.5 轻量级实战:从部署到优化的全记录

玩转 InternVL3.5 轻量级实战:从部署到优化的全记录

jacke121的专栏 626

227. 基本计算器 II

基本计算器 II 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1: 输入:s = "3+2*2" 输出:7 示例 2: 输入:s = " 3/2 " 输出:1 示例 3: 输入:s = " 3+5 / 2 " 输出:5 class Solution { public: int calculate(string s) { int i = 0; return help(s, i); } .

Tzecto 527

【深度学习新浪潮】OpenClaw跟机器人行业有哪些很好的研究结合点?

OpenClaw正通过"AI大脑+机器人肢体"的深度融合,重新定义机器人与人类的交互方式和自主操作能力。近期ROSClaw框架发布、人形机器人集成和空间计算试验等进展,标志着OpenClaw已从概念验证阶段进入实际应用落地期,为机器人行业带来了自然语言控制普及化具身智能平民化和跨平台开发标准化三大变革机遇。

专注:太空算力、AI infra、异构调度、大模型成本工程 228

[LeetCode 每日一题227]

227. 基本计算器 II 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1: 输入:s = "3+2*2" 输出:7 示例 2: 输入:s = " 3/2 " 输出:1 示例 3: 输入:s = " 3+5 / 2 " 输出:5 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/basic-calculator-ii 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 代

a924204825的博客 333

【Claude Code 源码解析教程】第4章:QueryEngine 查询引擎

本章深入解析 Claude Code 的核心引擎——QueryEngine,它是整个对话系统的"心脏",负责管理会话状态、消息处理流程和多轮对话支持。

rengang66的博客 269

继电保护原理1.2-反时限过流保护

反时限过流保护

让你爱上电路设计 1万+

LeetCode 227. 基本计算器 II 【c++/java详细题解】

目录1、题目2、思路3、c++代码4、java代码 1、题目 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1: 输入:s = "3+2*2" 输出:7 示例 2: 输入:s = " 3/2 " 输出:1 示例 3: 输入:s = " 3+5 / 2 " 输出:5 提示: 1 <= s.length <= 3 * 105 s 由整数和算符 ('+', '-', '*', '/') 组成,中间由一些空格隔开 s 表示一个 有效表达式

林深不见鹿 的博客 4237

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【LeetCode】227. Basic Calculator II 解题报告(Python)

【LeetCode】227. Basic Calculator II 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.me/ 题目地址:https://leetcode.com/problems/basic-calcul...

负雪明烛 5086

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

leetcode 227: Basic Calculator II

Implement a basic calculator to evaluate a simple expression string. The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should

明月江の鱼 1512

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LeetCode-227. Basic Calculator II [C++][Java]

Given a stringswhich represents an expression,evaluate this expression and return its value. The integer division should truncate toward zero.

贫道绝缘子的博客 903

【Leetcode】227. Basic Calculator II

遇到运算符,则看一下该运算符和运算符栈顶优先级哪个高,如果栈顶高,则出栈并与操作数栈中最上面两个数字做运算,结果再入栈。遍历完字符串后如果操作数栈里还有不止一个数字,说明还有运算没算完,则继续算,算到只剩最后一个数字为止。的意思是下面的运算符还未定义),接着我们遍历表达式,遍历的时候得到每个项和其前面的运算符。,如果下一项的运算符是乘除法,则说明前面遍历完留的末尾数需要参与乘除运算,例如如果下一项是。如果下一项的运算符是加减法,则说明前面遍历完的项可以合并了,如果是加法,则状态变为。

数学、算法爱好者的博客 375

leetcode 227. Basic Calculator II

题目描述 Implement a basic calculator to evaluate a simple expression string. The expression string contains onlynon-negativeintegers,+,-,*,/operators and empty spaces. The integer division shou...

orangefly0214的博客 272

Leetcode 227. Basic Calculator II

题目链接:https://leetcode.com/problems/basic-calculator-ii/#/description 题目描述: mplement a basic calculator to evaluate a simple expression string. The expression string contains only non-negative

yxy 368

Calculator系列问题二 LeetCode 227. Basic Calculator II

LeetCode 227. Basic Calculator II Implement a basic calculator to evaluate a simple expression string. The expression string contains only non-negative integers, +, -, *, / operators and empty spaces ...

katrina95的博客 371

LeetCode 227. Basic Calculator II

LeetCode 227. Basic Calculator II 时间复杂度O(n),空间复杂度O(1)c++

JY纪云的博客 484

LeetCode //C - 227. Basic Calculator II

【代码】LeetCode //C - 227. Basic Calculator II。

Made in Code 1029

Leetcode 227 Basic Calculator II

1. 问题描述  给遗传字符串类型的表达式,计算表达式的值。表达式只包含+、-、*、/和空格。   2. 方法与思路  此题和Basic Calculator I类似,只是左右括号换成了乘除符号。基本的做法依然是先转成后缀表达式的形式,然后在进行计算。   后缀表达式用vector<long> postfix的结构存储,为了方便,操作符和操作数都保存在postfix向量中,为了区分,操作数都以负

Jeanphorn的专栏 6514

Leetcode227 Basic Calculator II

描述:实现一个计算器,字符串中只包含非负整数,+,-,*,/和空格 Example1: Input: "3+2*2" Output: 7 Example2: Input: " 3/2 " Output: 1 这道题相对来说还是比较简单的,不需要考虑括号及其他运算,但是我做的答案还是有一些问题,先贴一个个人觉得比较好的代码 class Solution { public: ...

July__的博客 287

[LeetCode 227] Basic Calculator II

Implement a basic calculator to evaluate a simple expression string. The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should

coder 进阶的专栏 563

[leetcode] 227. Basic Calculator II

Description Implement a basic calculator to evaluate a simple expression string. The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division...

Learning from the mistakes 199

LeetCode 227 Basic Calculator II

原文Implement a basic calculator to evaluate a simple expression string.The expression string contains only non-negative integers, +, -, *, / operators and empty spaces .The integer division should trunc

nomasp 5113
上一篇: LeetCode91. Decode Ways
下一篇: LeetCode290. Word Pattern
_IanXiao
博客等级 码龄12年 84粉丝 241原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值