题解 | #表达式求值#

表达式求值

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    vector<int> function(string s, int index){
        stack<int> stack;
        int num = 0;
        char op = '+';
        int i;
        for(i = index; i < s.length(); i++){
            //数字转换成int数字
            if(isdigit(s[i])){
                num = num * 10 + s[i] - '0';
                if(i != s.length() - 1)
                    continue;
            }
            //碰到'('时,把整个括号内的当成一个数字处理
            if(s[i] == '('){
                //递归处理括号
                vector<int> res = function(s, i + 1);
                num = res[0];
                i = res[1];
                if(i != s.length() - 1)
                    continue;
            }          
            switch(op){
            //加减号先入栈
            case '+':
                stack.push(num);
                break;
            case '-':
                //相反数
                stack.push(-num);
                break;
            //优先计算乘号
            case '*': 
                int temp = stack.top();
                stack.pop();
                stack.push(temp * num);
                break;
            }
            num = 0;
            //右括号结束递归
            if(s[i] == ')')
                break;
            else
                op = s[i];
        }
        int sum = 0;
        //栈中元素相加
        while(!stack.empty()){ 
            sum += stack.top();
            stack.pop();
        }
        return vector<int> {sum, i};
        // stack<int> stack;
        // int num = 0;
        // char op = '+';
        // int i;
        // for(int i = index; i < s.length(); i++){
        //     // 数字转换成int数字
        //     if(isdigit(s[i])){
        //         num = num * 10 + s[i] - '0';
        //         if(i != s.length() - 1)
        //             continue;
        //     }
        //     // 碰到'('时,把整个括号内的内容当成一个数字处理
        //     if(s[i] == '('){
        //         // 递归处理括号
        //         vector<int> res = function(s, i + 1);
        //         num = res[0];
        //         i = res[1];
        //         if(i != s.length() - 1)
        //             continue;
        //     }
        //     switch(op){
        //     // 加减号先入栈
        //     case '+':
        //         stack.push(num);
        //         break;
        //     case '-':
        //         // 相反数
        //         stack.push(-num);
        //         break;
        //     // 优先计算乘号
        //     case '*':
        //         int temp = stack.top();
        //         stack.pop();
        //         stack.push(temp * num);
        //         break;
        //     }
        //     num = 0;
        //     // 右括号结束递归
        //     if(s[i] == ')')
        //         break;
        //     else
        //         op = s[i];
        // }
        // int sum = 0;
        // // 栈中元素相加
        // while(!stack.empty()){
        //     sum += stack.top();
        //     stack.pop();
        // }
        // return vector<int> {sum, i};
    }
    int solve(string s) {
        return function(s, 0)[0];
    }
};

没搞懂~~~

全部评论

相关推荐

喜欢喜欢喜欢:这是我见过最长最臭的简历
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务