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

  1. class Solution {
  2. public:
  3. int calculate(string s) {
  4. int num=,res=,n=s.size();
  5. stack<int> st;
  6. char op='+';
  7. for(int i=;i<n;i++){
  8. char c=s[i];
  9. if(c>='' && c<=''){
  10. num=num*+c-'';
  11. }else if(c=='('){
  12. int j=i,cnt=;
  13. for(;i<n;i++){
  14. if(s[i]=='(') cnt++;
  15. if(s[i]==')') cnt--;
  16. if(cnt==) break;
  17. }
  18. num=calculate(s.substr(j+,i-j-));
  19. }
  20. if(s[i]=='+' || s[i]=='-' || s[i]=='*' || s[i]=='/' || i==n-){
  21. if(op=='+') st.push(num);
  22. if(op=='-') st.push(-num);
  23. if(op=='*' || op=='/'){
  24. int temp=(op=='*')?(st.top()*num):(st.top()/num);
  25. st.pop();
  26. st.push(temp);
  27. }
  28. op=s[i];
  29. num=;
  30. }
  31. }
  32. while(!st.empty()){
  33. res+=st.top();
  34. st.pop();
  35. }
  36. return res;
  37. }
  38. };

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

  1. class Solution {
  2. public:
  3. int calculate(string s) {
  4. int res=,num=,last=,n=s.size();
  5. char op='+';
  6. for(int i=;i<n;i++){
  7. char c=s[i];
  8. if(c>=''&&c<=''){
  9. num=num*+c-'';
  10. }
  11. else if(c=='('){
  12. int j=i,cnt=;
  13. for(;i<n;i++){
  14. if(s[i]=='(') cnt++;
  15. if(s[i]==')') cnt--;
  16. if(cnt==) break;
  17. }
  18. num=calculate(s.substr(j+,i-j-));
  19. }
  20. if(c=='+' || c=='-' ||c=='*' ||c=='/' ||i==n-){
  21. if(op=='+') last+=num;
  22. if(op=='-') last-=num;
  23. if(op=='*') last*=num;
  24. if(op=='/') last/=num;
  25. if(c=='+'||c=='-'||i==n-){
  26. res+=last;
  27. last=;
  28. }
  29. op=c;
  30. num=;
  31. }
  32. }
  33. return res;
  34. }
  35. };

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. 思科恶意加密TLS流检测论文记录——由于样本不均衡,其实做得并不好,神马99.9的准确率都是浮云啊,之所以思科使用DNS和http一个重要假设是DGA和HTTP C&C(正常http会有图片等)。一开始思科使用的逻辑回归,后面17年文章是随机森林。

    论文记录:Identifying Encrypted Malware Traffic with Contextual Flow Data from:https://songcoming.github. ...

  2. Find a way out of the ClassLoader maze

    June 6, 2003 Q: When should I use Thread.getContextClassLoader() ? A: Although not frequently asked, ...

  3. android 数据库添加字符串 添加失败 解决方案

    这两天遇到一个棘手的问题,在往sqlite数据库中添加数据时,总是添加失败,但是添加数字却可以.原来是添加时,忘记添加''号修饰. 修改前: 修改后: 这样就完美解决.

  4. view的focusable属性改变设置是否可获取光标

    注意图中我画的箭头,当时鼠标点击的黑色圈圈的位置,然后按钮出现了按下的效果(黄色的描边) 刚开始看到这种效果很是好奇,不知道是怎么实现的,后来仔细一想,应该是整个啤酒罐是一张图片(ImageView) ...

  5. 【Loadrunner_WebService接口】对项目中的GetProduct接口生成性能脚本

    一.环境 https://xxx.xxx.svc?wsdl 用户名:username 密码:password 对其中的GetProduct接口进行测试 备注:GetProducts.xml文件内容和S ...

  6. learning rndis protocol

    reference:  https://docs.microsoft.com/en-us/windows-hardware/drivers/network/overview-of-remote-ndi ...

  7. POJ 1035 Spell checker 字符串 难度:0

    题目 http://poj.org/problem?id=1035 题意 字典匹配,单词表共有1e4个单词,单词长度小于15,需要对最多50个单词进行匹配.在匹配时,如果直接匹配可以找到待匹配串,则直 ...

  8. python-列表,元组,range

    # 列表# lst = ["光头强", 1, True, {}, (1, ), {123}, ["周杰伦",[], "周杰", " ...

  9. spoj705

    题解: 后缀数组求出height 然后ans=所有串-所有height 代码: #include<bits/stdc++.h> using namespace std; ; int t,a ...

  10. Java并发编程_wait/notify和CountDownLatch的比较(三)

     1.wait/notify方法 package sync; import java.util.ArrayList; import java.util.List; public class WaitA ...