[Leetcode] 772. Basic Calculator III 解题报告

Leetcode Basic Calculator I,II,III (python+cpp) Leetcode 227. Basic Calculator II题目解析: 题目 解析: 这个是必须掌握的题目。总体思路是,利用栈保存临时运算的结果,高优先级的先运算,最后直接对栈一次性求和。具体策略是: 利用栈来临时储存之前的运算结果,利用pre_op来保存之前最近一个的操作符,利用num保存当前数字 首先初始化stack为空,pre_op为+,num为0 如果当前碰到的是数字,要跟之前保存的数字进行累加,这是为了应对多位数的出现 如果当前碰到的是操作符或者是到了最后一个位置,那么对pre_op进行 阅读详情

题目:

Implement a basic calculator to evaluate a simple expression string.

The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .

The expression string contains only non-negative integers, +, -, *, / operators , open ( and closing parentheses ) and empty spaces . The integer division should truncate toward zero.

You may assume that the given expression is always valid. All intermediate results will be in the range of [-2147483648, 2147483647].

Some examples:

"1 + 1" = 2
" 6-4 / 2 " = 4
"2*(5+5*2)/3+(6/2+8)" = 21
"(2+6* 3+5- (3*14/7+2)*5)+3"=-12

 Note: Do not use the eval built-in library function.

思路:

我们顺序循环,处理字符串中的各个字符:如果遇到‘+’或者‘-’,就将其加入到数组nums中;如果遇到‘*’或者‘/’,则直接进行计算;如果遇到'(',则递归调用parseExpr函数,返回括号对里面的计算结果。当所有的数都计算完毕之后,将数组nums中的所有数加起来,返回和就可以了。

这里的奥妙在于采用"pass by reference"的方法,使得i成为“全局变量”;另外就是合理地设计递归调用的函数,以处理括号嵌套的问题。

代码:

class Solution {
public:
    int calculate(string s) {
        int i = 0;
        return parseExpr(s, i);
    }
private:
    int parseExpr(string &s, int &i) {  // parse the expression
        vector<int> nums;
        char op = '+';
        int n;
        for (; i < s.length() && op != ')'; ++i) {
            if (s[i] == ' ') {
                continue;
            }
            if (s[i] == '(') {
                n = parseExpr(s, ++i);
            }
            else {
                n = parseNum(s, i);
            }
            switch(op) {
                case '+':
                    nums.push_back(n);
                    break;
                case '-':
                    nums.push_back(-n);
                    break;
                case '*':
                    nums.back() *= n;
                    break;
                case '/':
                    nums.back() /= n;
                    break;
            }
            op = s[i];
        }
        int res = 0;
        for (int n : nums) {
            res += n;
        }
        return res;
    }
    
    int parseNum(string &s, int &i) {       // parse the num
        int n = 0;
        while (i < s.length() && isdigit(s[i])) {
            n = 10 * n + s[i++] - '0';
        }
        return n;
    }
};


vivado 编译ADI AD9361 TCL脚本生成hdl工程 (4)输入"source ../../scripts/adi_make.tcl"命令(仅双引号内部命令,不包含双引号),个人理解:该命令用来加载当前所需要编译工程所需要各功能模块的信息,因为每个工程需要不同的功能模块,比如有的需要gpio模块,有的不需要gpio模块,这些模块上前面路径的library也同样以TCL脚本形式存在,当有需要时才进行编译,怎么知道当前工程需要什么模块呢就是通过"source ../../scripts/adi_make.tcl"(仅双引号内部命令,不包含双引号)命令实现。 阅读详情

相关推荐

电力电子技术(13)——大功率可控整流电路

目录引言2.6.1 带平衡电抗器的双反星形可控整流电路电路结构的特点接平衡电抗器的原因平衡电抗器使得两组三相半波整流电路同时导电的原理分析谐波分析2.6.2 多重化整流电路概述原理目标1)移相多重联结2)多重联结电路的顺序控制3重晶闸管整流桥顺序控制带平衡电抗器的双反星形可控整流电路(是多重化整流电路的重要形式之一)的特点:适用于低电压、大电流的场合。多重化整流电路的特点:绕组的极性相反的目的:消除直流磁通势如图所示,虽然两组相电流的瞬时值不同,但是平均电流相等而绕组的极性相反,所以直流安匝(电流*匝数)互

weixin_45589295的博客 1万+

【LeetCode - 772】基本计算器 III

【困难】栈、字符串

学哥斌的博客 6152

XDS110 USB Debug Probe连接错误-260:CCS Theia环境下的诊断与修复指南

本文详细解析了CCS Theia环境下XDS110 USB Debug Probe连接错误-260的诊断与修复方法。从硬件连接到驱动状态、固件更新到软件配置,提供了全面的排查指南,帮助开发者快速解决这一常见的调试器通信障碍问题,确保嵌入式开发工作流畅进行。

hope8的博客 281

力扣772 基本计算器 III

力扣基本计算非递归写法

yu_duan_hun的博客 1833

R语言实战:5分钟搞定相加交互效应分析(逻辑回归/Cox回归/GLMM/GEE全支持)

本文详细介绍了如何利用R语言中的`scitable`包快速实现相加交互效应分析,支持逻辑回归、Cox回归、GLMM和GEE等多种模型。通过自动化计算RERI、AP和SI等指标,大幅提升临床研究和流行病学分析的效率与准确性,特别适合处理多因素联合作用的复杂场景。

fanta的博客 669

手把手教你用Docker快速部署开源MES系统(附避坑指南)

本文提供了一份详细的实战指南,手把手教你使用Docker容器化技术快速部署开源MES系统。内容涵盖从环境准备、项目选型、数据库配置到应用服务器优化、前端部署及生产环境监控的全流程,并附有避坑指南,旨在帮助中小制造企业IT人员和开发者低成本、高效率地构建智能制造解决方案。

f0g1h2的博客 1058

【LeetCode-772】基本计算器 III

【LeetCode-772】基本计算器 III

weixin_38846160的博客 5000

基于Cesium实现,动态水面+大坝排水动画

一、绘制面状水域,使用水波纹理,进行渲染,水体透明,可以看到底色。三、使用粒子系统,将喷泉改变方向,加上重力设置,实现排水动画。二、绘制线状三维体,用作模拟大坝拦截效果。四、最后,模拟水位上升,进行淹没分析,

一醉千秋的专栏 1418

关于leetcode772题基本计算器3的逆波兰式解法的讲解

1 认识逆波兰表达式逆波兰表达式又叫做后缀表达式,是一种没有括号,并严格遵循“从左到右”运算的后缀式表达方法,如下表所示:2 为什么从左到右遍历时,碰到了数字入栈,但是碰到了运算符号就要出栈两个数字呢?答:首先我们要知道,后缀表达式的意思就是运算符在两个运算数的后面(也是从左到右右遍历波兰式的顺序),但是我们计算的时候要求取得两个运算数和运算符,从左到右遍历会先知道运算数,所以要先存到栈中,当碰到运算符时就可以从栈中取出。

yxg520s的博客 1789

基于fme和python-docx第三方库批量更新不动产调查表

最近应朋友需要批量更新在不动产成果中提交的各种word报表中的指定数据,根据初步的了解,我做了一个基于fme软件和python-docx第三方库进行一个批量的更新方案。

weixin_43229258的博客 1240

【ACP】2025-最新-疑难题解析- 练习一汇总

他们对您的方案比较满意,作为一个特别看重用户体验的创业公司,他们有一个比较担心的问题:在后端云服务器 ECS 实例相对空闲时,可能会触发减少 ECS 实例的伸缩活动,这时候运行在即将移出伸缩组的 ECS 实例上的应用会被终止,那么发起这些应用的用户的体验会变差。:在使用阿里云的负载均衡 SLB 实例时,做了如下健康检查的配置:响应超时时间为 5 秒,健康检查间隔为 2 秒,不健康阈值为 3,健康阈值为 3,即对于确认一个后端服务器 ECS 实例是健康的,需要连续三次得到正常响应。以下说法哪一项是正确的?

jundao1997的专栏 325

字节跳动面试题.基本计算器系列「leetcode224. 基本计算器、leetcode227. 基本计算器 II、leetcode772. 基本计算器 III」

目录 题目一 leetcode224. 基本计算器 1.题目描述 2.解题思路 3.代码实现 题目二 leetcode227. 基本计算器 II 1.题目描述 2.解题思路 3.代码实现 题目三leetcode772. 基本计算器 III 1.题目描述 2.解题思路 3.代码实现 题目一 leetcode224. 基本计算器 1.题目描述 实现一个基本的计算器来计...

没有感情的刷题机器 4023

基于RK3568的YOLOv11模型端侧推理优化与部署实战指南

在AI边缘计算领域,瑞芯微RK3568芯片凭借其强大的NPU算力和丰富的接口资源,成为了众多开发者的首选平台。然而,瑞芯微官方文档虽然提供了YOLO11预训练模型的部署方案,但对于需要自定义数据集训练的开发者来说,从模型训练到板端部署的完整流程却缺乏详细指导。本文将带你走完从环境搭建、数据准备、模型训练到最终板端部署的完整技术路线,并分享实际开发中遇到的各种坑点和解决方案。让我们一起探索如何在RK3568平台上实现30FPS稳定推理的YOLO11目标检测应用!

m0_64661770的博客 115

LeetCode772. Basic Calculator III

数字字符串四则运算

grllery的博客 252

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Leetcode 772. Basic Calculator III

[LeetCode 772] Basic Calculator III 基本计算器之三 Implement a basic calculator to evaluate a simple expression string. The expression string may contain open(and closing parentheses), the plu...

weixin_30677073的博客 338

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

[LeetCode] 772. Basic Calculator III

https://segmentfault.com/a/1190000016429789?utm_source=tag-newest Problem Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing p...

豪猪的博客 2486

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

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

【Leetcode】772. Basic Calculator III

题目地址: https://leetcode.com/problems/basic-calculator-iii/ 给定一个中缀表达式,以字符串sss形式给出,包含空格,数字(题目保证除非是000,否则不以000开头),加减乘除和左右小括号。要求求其值。 经典算法是用两个栈,一个存操作数,另一个存操作符。具体算法可以参考https://blog.csdn.net/qq_46105170/article/details/106209367。大致思路如下: 1、先规定每个运算符(还有左括号)的优先级,左括号优先

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

Calculator系列问题三 LeetCode 772. Basic Calculator III

LeetCode 772. Basic Calculator III Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, ...

katrina95的博客 1092

leetcode 772. Basic Calculator III

Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty sp...

cmy203的博客 254

[亚麻高频题] Leetcode 772. Basic Calculator III (计算器 III)

题目描述 & 链接 Leetcode 772:是Leetcode 224. Basic Calculator(计算器)题目的进阶版,给定一个计算表达式,运算符包括左右括号,"+ - * /"运算,求最后计算结果 题目思路 与Leetcode 224. Basic Calculator(计算器)是相同的,利用双栈(符号栈,数字栈)求解,具体可以参考前面链接,唯一需要改进的是加入乘法和除法并分配为最高优先级,在维护符号栈时,当新符号优先级比栈顶小或相同时,触发计算,直到栈顶空或者比当前有限...

ok1382038的博客 1674

Leetcode solution 772: Basic Calculator III

Problem Statement Implement a basic calculator to evaluate a simple expression string. The expression string may contain open(and closing parentheses), the plus+or minus sign-,...

weixin_30832143的博客 194

LeetCode #772 - Basic Calculator III

题目描述: Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and e...

LawFile的博客 565

LeetCode-772. Basic Calculator III

Implement a basic calculator to evaluate a simple expression string. The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .

贫道绝缘子的博客 459

LeetCode 224, 227, 772. Basic Calculator I+II+III

Basic Calculator 由于只需要实现加减和括号,除了括号不需要考虑运算的优先级,所以可以直接one pass做。 思路是将 a-b 等价为 a+(-b),这样所有的运算都是加法,而负号只要乘以后面的数即可。 建立一个stack,遇到左括号时,压栈迄今为止的和以及括号前的符号。遇到对应右括号时,括号内已经计算完毕,这时我们将括号内计算得到的sum*栈顶的符号,再加上栈内前...

weixin_30507269的博客 413

leetcode - 772. Basic Calculator III

leetcode - 772

sinat_41679123的博客 627

[LeetCode] Basic Calculator I II III 总结

前几天在微信公众号看了一个大佬对于如何实现一个简易计算器的思路分享,学到很多。于是在LeetCode上找到原题码了码,在此记录一下自己的心得。 先放上原题: LeetCode-224 :Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression stri...

gratdan的博客 467
上一篇: [Leetcode] 771. Jewels and Stones 解题报告
下一篇: [Leetcode] 773. Sliding Puzzle 解题报告
魔豆Magicbean
博客等级 码龄19年 146粉丝 742原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值