这道题就可以结合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. Python isspace() 方法检测字符串是否只由空格组成。

  2. Mysql 在 Windows环境下安装:应用程序无法正常启动0xc000007b

    DirectX 修复工具 v3.7增强版 链接: https://pan.baidu.com/s/135pZUNwpXcMZjyLB41sQCg 密码: gtb5

  3. LY.JAVA面向对象编程.包的概述、导包

    2018-07-18 08:46:57 导包:

  4. Win10系列:UWP界面布局基础4

    类型转换 前面讲到过,在定义元素时可以通过Attributes特性方式为其设置属性并为属性赋值,在实际开发中所赋予的值可能和属性本身的数据类型不相符,这时XAML解析器就会使用类型转换器(Type C ...

  5. Java 统计字母个数

    原理: 将字符串转换成char字符数组 然后使用另一个数组存储 代码如下 public class CalChar { public static void main(String[] args) { ...

  6. 图片加载------reactVirtualized

    作用: 让HTML文档始终保持固定数量的图片数量,可以节省带宽

  7. flask项目结构(二)创建flask,同步docker

    简介: 建立flask容易,那么部署就比较麻烦了,配这个,配那个,更新………… 所以我从构建,就考虑部署的问题,使用docker部署. 程序都打包进docker,本博客有相关文章. pycharn直接 ...

  8. C++ Templates STL标准模板库的基本概念

    STL标准库包括几个重要的组件:容器.迭代器和算法.迭代器iterator,用来在一个对象群集的元素上进行遍历操作.这个对象群集或许是一个容器,或许是容器的一部分.迭代器的主要好处是,为所有的容器提供 ...

  9. SmtpClient SSL 发送邮件异常排查

    上周使用 SmtpCliet 发送邮件测试,在服务端配置 SSL 465 / 993 情况 ,客户端使用 465 SSL 端口发送邮件异常,测试代码如下: System.Net.ServicePoin ...

  10. CSS特性

    css的特性 css具有两大特性:继承性和层叠性 1.继承性 指的是子元素继承父元素的样式,但没有所有的样式都可以继承(那样就太可怕了) 所以具有继承性的属性主要分为三大类 a.文本属性 font-s ...