题解 | #表达式求值#

表达式求值

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
   unordered_map<char, int> pri = {
        {'-',1},{'+',1},{'*',2}
    };
    int solve(string s) {
        // write code here
        //双栈
        stack<char> ops;
        stack<int> nums;
        nums.push(0);
        int n = s.size();
        for(int i = 0;i < n;i ++) {
            if(isdigit(s[i])) {
                int j = i;
                while(j < n&&isdigit(s[j])) j ++;
                int num = stoi(s.substr(i,j-i));
                nums.push(num);
                i = j - 1;
            } else if (s[i] == '(') {
                ops.push(s[i]);
            } else if (s[i] == ')') {
                while(!ops.empty()&&ops.top()!='(') {
                    calc(nums,ops);
                }
                ops.pop();
            } else {
                //新操作
                while(!ops.empty()&&ops.top() != '(') {
                    if(pri[ops.top()] >= pri[s[i]]) {
                        calc(nums,ops);
                    }else {
                        break;
                    }
                }
                ops.push(s[i]);
            }
        }
        while(!ops.empty()&&ops.top() != '(') calc(nums,ops);
        return nums.top();
        
    }
    
    void calc(stack<int>& nums, stack<char>& ops) {
        char op = ops.top();
        ops.pop();
        int b = nums.top();
        nums.pop();
        int a = nums.top();
        nums.pop();
        int ans = 0;
        switch (op) {
            case '+':
                ans = a +b;
                break;
            case '-':
                ans = a-b;
                break;
            case'*':
                ans = a*b;
                break;
            default:
                break;
                
        }
        nums.push(ans);
    }
};

全部评论

相关推荐

02-16 10:35
已编辑
西安科技大学 后端
虚闻松声:整体应该挺好了 项目2-3个就够了。都类似第一段这么写。 构建数据闭环 推动工程创新 优化架构设计 免费修改简历,就业咨询,欢迎私信交流。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 听劝,这个简历怎么改 #
14064次浏览 182人参与
# 面试被问“你的缺点是什么?”怎么答 #
6309次浏览 98人参与
# 水滴春招 #
16219次浏览 339人参与
# 入职第四天,心情怎么样 #
11265次浏览 63人参与
# 租房找室友 #
7997次浏览 53人参与
# 读研or工作,哪个性价比更高? #
26139次浏览 356人参与
# 职场新人生存指南 #
199165次浏览 5506人参与
# 参加完秋招的机械人,还参加春招吗? #
26960次浏览 276人参与
# 文科生还参加今年的春招吗 #
4101次浏览 31人参与
# 简历无回复,你会继续海投还是优化再投? #
48608次浏览 561人参与
# 你见过最离谱的招聘要求是什么? #
144708次浏览 829人参与
# 如果重来一次你还会读研吗 #
155712次浏览 1706人参与
# 机械人选offer,最看重什么? #
69076次浏览 449人参与
# 选择和努力,哪个更重要? #
44261次浏览 492人参与
# 如果再来一次,你还会学硬件吗 #
103638次浏览 1245人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20517次浏览 413人参与
# 招聘要求与实际实习内容不符怎么办 #
46662次浏览 494人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
4652次浏览 27人参与
# 你们的毕业论文什么进度了 #
901179次浏览 8960人参与
# 软开人,你觉得应届生多少薪资才算合理? #
81368次浏览 496人参与
# 国企还是互联网,你怎么选? #
109188次浏览 853人参与
牛客网
牛客企业服务