这道题就可以结合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. 把旧系统迁移到.Net Core 2.0 日记 (12) --发布遇到的问题

    1. 开发时是在Mac+MySql, 尝试发布时是在SQL2005+Win 2008 (第一版) 在Startup.cs里,数据库连接要改,分页时netcore默认是用offset关键字分页, 如果用 ...

  2. 用WebStorm进行Angularjs 2的开发

    环境准备: WebStorm开发工具  https://pan.baidu.com/s/1o8maQLG  提取密码(加群获取599606903) nodejs  https://nodejs.org ...

  3. Zookeeper的实际应用

    Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多.今天我想谈谈zookeeper,本文不谈如何使用zo ...

  4. RBAC功能模块

  5. shell script auto generate the relevant header information

    first : add follow context in   /etc/vim/vimrc set ignorecaseset cursorlineset autoindentautocmd Buf ...

  6. day22 模块_1

    核能来袭--模块 1.简单了解模块 2.Collections 3.Time模块 4.functools 一.初识模块 其实之前写的每一个PY文件都是一个模块 还有一些我们一直在使用的模块  buil ...

  7. vue-9-动画

    transition: <div id="demo"> <button v-on:click="show = !show"> Toggl ...

  8. Sql Server 中 根据列名查询表名

    已知列名 ELEMENT_ID ,查询所属表名称 Select O.name objectName, C.name ColumnName from sys.columns C inner join s ...

  9. jmeter源码导入eclipse并执行

    由于JMeter纯Java开发,界面也是基于Swing或AWT搞出来的,所以想更深层次的去了解这款工具或对于想了解JMeter插件开发或二次开发的童鞋们来说,读读JMeter的源码估计是必不可少的,所 ...

  10. centos7配置hadoop集群

    一:测试环境搭建规划: 主机名称 IP 用户 HDFS YARN hadoop11 192.168.1.101 hadoop NameNode,DataNode NodeManager hadoop1 ...