题解 | 表达式求值

表达式求值

https://www.nowcoder.com/practice/c215ba61c8b1443b996351df929dc4d4?tpId=383&tqId=1076787&channelPut=tracker1

#include <vector>
#include <stack>
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    vector<int> function(string s1, int index){
        
        int num  = 0;
        char op = '+';//默认加法,使得一开始入栈的数字就是以原来形式进入
        stack<int> a;// a栈用于存储数字
        int i ;
        for (i = index; i< s1.size(); i++) {
            
            if (isdigit(s1[i])) {
                num = num * 10 + s1[i] - '0';
                if (i != s1.size()-1) {//如果i=size-1时还continue,那就会错过后面的将num压入栈中
                    continue;//直接检索下一个是否也是数字
                }
            }

            if (s1[i] == '(') { // 将进入内层递归计算
                num = function(s1,i+1)[0];
                i = function(s1,i+1)[1]; //s1[i] == ')',之后i就会+1了,正好指向新的数字
                if (i != s1.size()-1) {
                    continue;// 等于size-1时,这个时候不能continue,这个时候得到下面,进行入栈操作
                }
            }

            switch (op) {
                case '+':{
                    a.push(num);
                    break;
                }
                case '-':{
                    a.push(-num);
                    break;
                }
                case '*':{
                    int result = num * a.top();
                    a.pop();
                    a.push(result);
                    break;
                }
            }

            num = 0;
            if (s1[i] == ')') {
                break;
            }
            else {// s1[i]= + - *
                op = s1[i];
            }

        }
        int summ = 0;
        while (!a.empty()) {
            summ += a.top();
            a.pop();
        }
        return {summ, i};
    }
    int solve(string s) {
        // write code here
        //括号内的数字要先算,比*优先级还高,可以设置递归,遇到(就进入下一层函数,在内层函数里把括号内的值算出来
        return function(s, 0)[0];//return只能返回一个变量,取vector function第一个元素summ
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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