博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【LeetCode】224. Basic Calculator
阅读量:6284 次
发布时间:2019-06-22

本文共 2595 字,大约阅读时间需要 8 分钟。

Basic Calculator

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 .

You may assume that the given expression is always valid.

Some examples:

"1 + 1" = 2" 2-1 + 2 " = 3"(1+(4+5+2)-3)+(6+8)" = 23

 

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

 

两个要点:

1、无括号时,顺序执行

2、有括号时,先执行括号中的

两个栈:

一个存放操作数,每次进栈要注意,如果操作符栈顶元素为'+'/'-',则需要立即计算。

一个存放操作符(包括括号),每次出现')'时,不断进行出栈计算再进栈,直到弹出'(',说明当前括号内计算完毕。

class Solution {public:    int calculate(string s) {        stack
num; stack
op; int i = 0; while(i < s.size()) { while(i < s.size() && s[i] == ' ') i ++; if(i == s.size()) break; if(s[i] == '+' || s[i] == '-' || s[i] == '(') { op.push(s[i]); i ++; } else if(s[i] == ')') { while(op.top() != '(') {
// calculation within parentheses int n2 = num.top(); num.pop(); int n1 = num.top(); num.pop(); if(op.top() == '+') num.push(n1 + n2); else num.push(n1 - n2); op.pop(); } op.pop(); while(!op.empty() && op.top() != '(') { int n2 = num.top(); num.pop(); int n1 = num.top(); num.pop(); if(op.top() == '+') num.push(n1 + n2); else num.push(n1 - n2); op.pop(); } i ++; } else { int n = 0; while(i < s.size() && s[i] >= '0' && s[i] <= '9') { n = n*10 + (s[i]-'0'); i ++; } num.push(n); while(!op.empty() && op.top() != '(') { int n2 = num.top(); num.pop(); int n1 = num.top(); num.pop(); if(op.top() == '+') num.push(n1 + n2); else num.push(n1 - n2); op.pop(); } } } return num.top(); }};

转载地址:http://sdxva.baihongyu.com/

你可能感兴趣的文章
Mysql-5.6.x多实例配置
查看>>
psutil
查看>>
在git@osc上托管自己的代码
查看>>
机器学习算法:朴素贝叶斯
查看>>
小五思科技术学习笔记之扩展访问列表
查看>>
使用Python脚本检验文件系统数据完整性
查看>>
使用MDT部署Windows Server 2003 R2
查看>>
Redhat as5安装Mysql5.0.28
查看>>
通过TMG发布ActiveSync
查看>>
Web服务器的配置与管理(4) 配置访问权限和安全
查看>>
存储过程加密
查看>>
[再寄小读者之数学篇] (2014-04-18 from 352558840@qq.com [南开大学 2014 年高等代数考研试题]一个秩等式)...
查看>>
hrbustoj 1179:下山(DFS+剪枝)
查看>>
DIOCP开源项目-DIOCP3直接发送对象,帮你处理粘包问题
查看>>
MongoDB-固定集合 capped collection 操作 介绍
查看>>
npoi实现 从固定的行读取数据作为表头并返回datable
查看>>
【Hibernate学习】 ——ORM(三)
查看>>
概率dp入门
查看>>
dotfuscator初步
查看>>
Ubuntu各个版本的介绍
查看>>