Leetcode227 Basic Calculator II

语音测试(二)音频标注(praat) 通过点击红线下方的圆点进行区域划分,在区域中标注所属的类别。按住Alt+Backspace 键取消蓝色线条。 阅读详情

描述:实现一个计算器,字符串中只包含非负整数,+,-,*,/和空格

Example1:    Input: "3+2*2" Output: 7

Example2:     Input: " 3/2 " Output: 1

这道题相对来说还是比较简单的,不需要考虑括号及其他运算,但是我做的答案还是有一些问题,先贴一个个人觉得比较好的代码

class Solution {
public:
    int calculate(string s) {
        stack<int> res;
        stringstream ss('+' + s);          //在整个字符串前面增加一个“+”作为第一个数字的符号
        int n;
        char op;
        while(ss >> op >> n) {             //stringstream这种用法值得学习,同时也排除了空格的影响
            if(op == '+') {
                res.push(n);
            }
            if(op == '-')
                res.push(-n);
            if(op == '*') {
                int ans = res.top() *n;
                res.pop();
                res.push(ans);
            }
            if(op == '/') {
                int ans = res.top() /n;
                res.pop();
                res.push(ans);
            }    
        }
        int ans=0;
        while(res.size()!=0) {ans+=res.top(); res.pop();}   
        return ans;
    }
};

下面是我的代码,建了两个栈——符号栈和数字栈,通过比较不同符号之间的优先级大小确定顺序,debug很久   一些小细节很容易出错

class Solution {
public:
	int cal(int num1, int num2, char c)
	{
		int num = 0;
		switch(c)
		{
		case '+':  num = num1 + num2; break;
		case '-':  num = num1 - num2; break;
		case '*':  num = num1 * num2; break;
		case '/':  num = num1 / num2; break;
		default:
			break;
		}
		return num;
	}
 	int calculate(string s) {
		map<char, int> priority;
		stack<int> num;
		stack<char> opt;
		priority['+'] = 0;
		priority['-'] = 0;
		priority['*'] = 1;
		priority['/'] = 1;
		int size = s.size();
		int i = 0;
		while(i < size)
		{
			while(i < size && s[i] == ' ')
            {
                i++;
            }
			if(i < size && s[i] >= '0' && s[i] <= '9')
			{
                int number = 0;
                while(i < size && s[i] >= '0' && s[i] <= '9')
                {
                    number = number * 10 + (s[i] - '0');
				    i++;
                }
                num.push(number);
				
			}
			else if(i < size)
			{
				if(opt.empty() || priority[s[i]] > priority[opt.top()])
					opt.push(s[i]);
				else
				{
					while(!opt.empty() && priority[s[i]] <= priority[opt.top()])
					{
						int num2 = num.top();
						num.pop();
						int num1 = num.top();
						num.pop();
						char c = opt.top();
						opt.pop();
						int res = cal(num1, num2, c);
						num.push(res);
						
					}
                    opt.push(s[i]);
				}
				

				i++;  
			}
		}
		
		while(!opt.empty() && !num.empty())
		{
			int num2 = num.top();
			num.pop();
			int num1 = num.top();
			num.pop();
			char c = opt.top();
			opt.pop();
			int res = cal(num1, num2, c);
			num.push(res);
		}
		return num.top();
	}
};

再贴一种代码   思路和上述我的思路一样,但是代码风格更好看一点:

class Solution {
public:
    bool cmp(char op1, char op2){
        if((op1 == '+' || op1 == '-') && (op2 == '*' || op2 == '/')){
            return false;
        }else if(op1 == '#'){
            return false;
        }else if(op2 == '#'){
            return true;
        }else{
            return true;
        }
    }
    int cal(int a, int b, int op){
		switch (op){
		case '+': return a + b;
		case '-': return a - b;
		case '*': return a * b;
		case '/': return a / b;
		default: return 0;
		}
	}
    int calculate(string s) {
        int ans = 0;
        int index = 0;
        s += "#";
        int len = s.length();
        stack<int> num;
        stack<char> opt;
        opt.push('#');
        while(index < len){
            while(index < len && s[index] == ' '){
                ++index;
            }
            if(index < len && s[index] >= '0' && s[index] <= '9'){
                int tmp = 0;
                while(index < len && s[index] >= '0' && s[index] <= '9'){
                    tmp = tmp * 10 + s[index] - '0';
                    ++index;
                }
                num.push(tmp);
                //cout<<"push: "<<tmp<<endl;
            }else if(index < len){
                char c = s[index++];
                //cout << "top "<<opt.top()<<" c "<<c<<endl;
                while(!opt.empty() && cmp(opt.top(), c)){
                    int b = num.top();
					num.pop();
					int a = num.top();
					num.pop();
					num.push(cal(a, b, opt.top()));
					//cout<<"push calc: "<<cal(a, b, opt.top())<<endl;
					opt.pop();
                }
                //cout<<"push: "<<c<<endl;
                opt.push(c);
            }
        }
        return num.top();
    }
};

 

LLCC68芯片系统架构与LoRa驱动开发核心解析 LoRa射频收发器是低功耗广域物联网(LPWAN)的关键组件,其本质是集成了调制解调器、协议引擎、数据缓冲区与电源管理的专用SoC。理解其工作模式状态机(Sleep/Standby/TX/RX)与SPI主机接口时序规范,是实现稳定通信的基础。LLCC68通过寄存器映射与命令集双接口抽象硬件控制,支持LoRa扩频调制与FSK兼容模式,具备高链路预算(157 dB)和DC-DC/LDO动态电源切换能力。典型应用场景包括远距离传感器节点、智能表计与工业无线监测系统。本文深入剖析LLCC68的信号链路径、中断机制与 阅读详情

相关推荐

软考中级-系统集成项目管理工程师**的超详细知识点笔记。

软考中级系统集成项目管理工程师核心知识点摘要 综合知识:涵盖信息化基础(国家信息化六要素、信息系统开发方法)、系统集成特点(高技术性、团队协作)、IT服务管理(ITIL流程)、网络技术(OSI模型、TCP/IP)、信息安全(CIA三要素、加密技术)、软件工程(生命周期、测试类型)、面向对象分析与设计(UML图)、新一代信息技术(云计算、大数据、物联网)。 案例分析:聚焦项目管理十大知识领域,重点包括: 整体管理(项目章程、变更控制流程) 范围管理(WBS分解、需求跟踪矩阵) 进度管理

最爱で毛毛熊的博客 1991

LeetCode 227. 基本计算器 II

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

Sasakihaise_的博客 2874

深入了解torch框架

大国的游戏,政府支持到位,是未来;AI : Artificial Intelligence,旨在研究、开发能够模拟、延伸和扩展人类智能的理论、方法、技术及应用系统,是一种拥有自主学习和推理能力的技术。它模仿人类大脑某些功能,包括感知、学习、理解、决策和问题解决。AI本质​ NLP(说话,听)、CV(眼睛)、自动驾驶、机器人(肢体动作)、大模型三要素:数据、网络、算力① 神经网络:找到合适的数学公式;② 训练:用已有数据训练网络,目标是求最优解;③ 推理:用模型预测新样本;PyTorch,简称Torch

qq_74732076的博客 1136

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

车道线检测1.0(Python+Opencv基础版)

车道线检测是指在道路上自动检测和识别车道线的过程。车道线是道路上的标记,用于指示车辆行驶的方向和位置。 通过对车道线进行检测和识别,自动驾驶和智能驾驶系统可以实现车辆的自动导航、车道保持、车道偏离警告等功能。

Dream_orz的博客 4265

语义通信高斯信道仿真代码

【代码】语义通信高斯信道仿真代码。

一去不复返的通信er 427

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

MATLAB实战:5步搞定GNSS单点定位解算(附完整代码)

本文提供了一份基于MATLAB的GNSS单点定位实战指南。通过5个核心步骤,详细讲解了如何从卫星坐标和伪距观测值出发,利用最小二乘迭代算法,构建并实现一个完整的单点定位解算器。文章附有完整代码,并涵盖精度评估与结果分析,适合GNSS初学者和MATLAB用户快速上手实践。

a2b3c4d5e的博客 250

[Leetcode] 227.基本计算器

好题分享:[Leetcode] 227.基本计算器

石墨博客 1214

STM32堆栈溢出问题及解决方法

堆栈是用于存储函数调用和局部变量的内存区域,它是一种先进后出的数据结构。如果函数嵌套层级过深或者局部变量占用的内存空间过大,堆栈的大小可能不足以容纳这些信息,从而导致堆栈溢出。在一些特殊情况下,可以使用堆内存替代堆栈,以避免堆栈溢出问题。在STM32的工程中,可以通过修改链接脚本文件(.ld文件)中的堆栈大小参数来增加堆栈空间。通常,堆栈大小设置为RAM的一小部分,但需要根据具体应用的需求进行调整。堆栈溢出是嵌入式系统开发中常见的问题之一,特别是在使用STM32微控制器时。3.3 使用堆内存替代堆栈。

ZwcCsharp的博客 2594

【异常】Milvus 向量数据库字段缺失错误分析与解决 MilvusVectorStoreServiceV2 - Failed to insert batch [0-1]: The field:

本文分析了Milvus向量数据库插入操作中出现的字段缺失错误。错误显示age_mode字段未提供,导致批量插入失败。根本原因是Milvus Schema要求所有定义字段必须存在,但代码中对部分字段采用条件添加方式。解决方案是将条件添加改为始终添加,为可能为null的字段提供空字符串默认值。文章总结了Schema约束、防御性编程等经验,并建议通过Schema变更检查、单元测试覆盖和数据校验层等预防措施避免类似问题。该问题影响product、mac、source等多个字段,修改后确保了数据插入的可靠性。

奶爸的编程之路,也就一周冷个三天 409

【LeetCode】227. 基本计算器 II

day210,双栈解法

weixin_43894455的博客 646

YOLOv12改进策略【卷积层】| SPD-Conv 针对小目标和低分辨率图像的检测任务

SPD-Conv是一种新的 CNN 构建模块,用于替代传统 CNN 架构中使用的步长卷积(strided convolution)和池化(pooling)层,它由空间到深度(Space-to-depth,SPD)层和非步长卷积(non - strided convolution)层组成。

Limiiiing的博客 1779

【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,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

明月江の鱼 1513

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

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

计算机控制技术及应用

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

【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 369

LeetCode //C - 227. Basic Calculator II

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

Made in Code 1029

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 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

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

Jeanphorn的专栏 6514

[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
上一篇: Leetcode698 Partition to K Equal Sum Subsets
下一篇: Leetcode48 Rotate Image
July__
博客等级 码龄12年 5粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值