题解 | 表达式求值

表达式求值

https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4

#include <cctype>
#include <functional>
#include <vector>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    vector<int> function(string s,int index)
    {
        int num=0;//数字转换的大小
        char op = '+';//上一个运算符号,默认为加法,因为遇到数字时需要上一个运算符号来计算
        int i;//字符串中的位置,记录从哪个位置开始遍历字符串
        stack<int> stk;
        for(i=index;i<s.size();i++)
        {
            if(isdigit(s[i]))
            {
              while(i!=s.size()&&isdigit(s[i]))
              {
                 num=num*10 + s[i] - '0';
                 i++;
              }
            }
            if(s[i]=='(')//右括号,把括号当做是一个整体int值
            {
                vector<int> vec=function(s,i+1);//右括号后面的位置为运算数字和符号的起始位置
                num=vec[0];//括号的整体结果
                i=vec[1];//从括号结束的下一个位置开始出发
                if(i!=s.size()-1)
                {
                    continue;
                }
            }
            switch (op) {
                case '+':
                {
                    stk.push(num);
                    break;
                }
                 case '-':
                {
                    stk.push(-num);
                    break;
                }
                 case '*':
                {
                    int temp=stk.top();
                    stk.pop();
                    stk.push(temp*num);
                    break;
                }
            }
            num=0;
            if(s[i]==')')
            {
                break;//说明此时到了括号的结尾
            }
            else {
              op=s[i];//记录上一次的运算符号
            }
        }

        int sum=0;
          while(!stk.empty())
          {
             sum+=stk.top();
             stk.pop();
          }
          return vector<int> {sum, i};

    }
    int solve(string s) {
        // write code here
        return function(s,0)[0];
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务