这道题就可以结合Basic Calculator中的两种做法了,分别是括号运算和四则运算的,则使用stack作为保持的结果,而使用递归来处理括号内的值的。

class Solution {
public:
int calculate(string s) {
int num=,res=,n=s.size();
stack<int> st;
char op='+';
for(int i=;i<n;i++){
char c=s[i];
if(c>='' && c<=''){
num=num*+c-'';
}else if(c=='('){
int j=i,cnt=;
for(;i<n;i++){
if(s[i]=='(') cnt++;
if(s[i]==')') cnt--;
if(cnt==) break;
}
num=calculate(s.substr(j+,i-j-));
}
if(s[i]=='+' || s[i]=='-' || s[i]=='*' || s[i]=='/' || i==n-){
if(op=='+') st.push(num);
if(op=='-') st.push(-num);
if(op=='*' || op=='/'){
int temp=(op=='*')?(st.top()*num):(st.top()/num);
st.pop();
st.push(temp);
}
op=s[i];
num=;
}
}
while(!st.empty()){
res+=st.top();
st.pop();
}
return res;
}
};

当然这个地方也是可以进行一个变化的,不使用栈,而是考虑用一个变量来保存上一个值的,即栈顶的值,然后继续进行处理的。

class Solution {
public:
int calculate(string s) {
int res=,num=,last=,n=s.size();
char op='+';
for(int i=;i<n;i++){
char c=s[i];
if(c>=''&&c<=''){
num=num*+c-'';
}
else if(c=='('){
int j=i,cnt=;
for(;i<n;i++){
if(s[i]=='(') cnt++;
if(s[i]==')') cnt--;
if(cnt==) break;
}
num=calculate(s.substr(j+,i-j-));
}
if(c=='+' || c=='-' ||c=='*' ||c=='/' ||i==n-){
if(op=='+') last+=num;
if(op=='-') last-=num;
if(op=='*') last*=num;
if(op=='/') last/=num;
if(c=='+'||c=='-'||i==n-){
res+=last;
last=;
}
op=c;
num=;
}
}
return res;
}
};

leetcode 772.Basic Calculator III的更多相关文章

  1. [LeetCode] 772. Basic Calculator III 基本计算器之三

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  2. 【leetcode】Basic Calculator III

    题目如下: Implement a basic calculator to evaluate a simple expression string. The expression string may ...

  3. [LeetCode] 227. Basic Calculator II 基本计算器之二

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  4. Lintcode: Expression Evaluation (Basic Calculator III)

    Given an expression string array, return the final result of this expression Have you met this quest ...

  5. [LeetCode] 224. Basic Calculator 基本计算器

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  6. [LeetCode] 227. Basic Calculator II 基本计算器 II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  7. [LeetCode] Basic Calculator III 基本计算器之三

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  8. LeetCode#227.Basic Calculator II

    题目 Implement a basic calculator to evaluate a simple expression string. The expression string contai ...

  9. Java for LeetCode 227 Basic Calculator II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

随机推荐

  1. ActiveMQ broker和客户端之间的确认

    生产者发送消息:producer ---------> broker broker返回确认:broker ---------> producer 生产者发送同步消息,broker会返回Re ...

  2. Kali安装教程(VMWare)

    1.下载镜像及相关 1.1下载镜像文件 下载链接:https://www.kali.org/downloads/ 选择自己需要的版本下载,根据经验先下载种子文件(torrent)再用迅雷下载网速是最有 ...

  3. Qt画笔实现曲线

    效果图: void CurvePoint::paintEvent(QPaintEvent *event) { // 曲线上的点 static QList<QPointF> points = ...

  4. LY.JAVA面向对象编程.内部类

    2018-07-18 10:14:48 /* 内部类概述: 把类定义在其他类的内部,这个类就被称为内部类. 举例:在类A中定义了一个类B,类B就是内部类. 内部的访问特点: A:内部类可以直接访问外部 ...

  5. Win10系列:VC++绘制几何图形2

    新建了Direct2D中的资源后,接下来初始化用于绘制图形的应用窗口.在解决方案资源管理器窗口中右键点击项目图标,在弹出的菜单栏中选中"添加", 并在"添加"的 ...

  6. dump_stack使用

    我们在调试内核时可以用printk打印信息.但有时我们不知道一个函数或者一个模块到底在哪里出了问题.这时我们可以用dump_stack打印信息,查看函数调用关系,找到问题的根源.使用实例: hello ...

  7. day04流程控制之while循环

    流程控制之while循环 1.什么是while循环 循环指的是一个重复做某件事的过程 2.为何有循环 为了让计算机能像人一样重复 做某件事 3.如何用循环 ''' # while循环的语法:while ...

  8. Web API之路由浅谈

    Web API的路由,是指明接口地址的方向,是照亮获取数据路上的灯塔,其重要性不言而喻. 本篇文章以vs2015为例,一步步说明路由的创建及使用,其中包括默认路由.自定义路由和特性路由. 一.默认路由 ...

  9. win10企业版激活

    slmgr.vbs /upk slmgr /ipk NPPR9-FWDCX-D2C8J-H872K-2YT43 slmgr /skms zh.us.to slmgr /ato

  10. VSTO:使用C#开发Excel、Word【1】

    <Visual Studio Tools for Office: Using C# with Excel, Word, Outlook, and InfoPath >——By Eric C ...