【剑斩OFFER】算法的暴力美学——力扣 227 题:基本计算机Ⅱ

一、题目描述

二、算法原理

思路:使用 vector 来模拟栈结构存储整数,char 类型来存储运算符

1)一开始把 op 初始化为 '+',便于后续操作

2)开始变量字符串,如果是运算符直接 op = 运算符,更新运算符

3)如果是数字,因为有些数字是连续的,例如:"123",我们使用 while 拿到完整的数字 123,之后判断 op 是什么运算符,if : op == '-',就让他变成相反数再入栈,if : op == '/' ,到栈顶元素之后把栈顶元素出栈,最后栈顶元素 / 数字的结果入栈,if : op == '*' ,这个过程和 / 一样,if : op == ' + ' ,直接让数字入栈。

过程:

4)把栈里面的数字全部加起来的值就是最终答案;

三、代码实现

cpp 复制代码
class Solution {
public:
    int calculate(string s) {
        char op = '+';
        vector<int> stack;
        for(int i = 0; i < s.size();)
        {
            char ch = s[i];
            if(ch == ' ')//空格就下一个
            {
                i++;
                continue;
            }
            if(ch == '-' || ch == '+' || ch == '/' || ch == '*')//处理运算符
            {
                op = ch;
                i++;
            }
            else
            {
                //整数
                int tmp = 0;
                while(i < s.size() && isdigit(s[i]))//保证循环时 s[i] 是整数
                {
                    tmp = tmp * 10 + (s[i] - '0');
                    i++;
                }
                if(op == '-') tmp = 0 - tmp;
                else if(op == '*')
                {
                    tmp = stack.back() * tmp;
                    stack.pop_back();
                }
                else if(op == '/')
                {
                    tmp = stack.back() / tmp;
                    stack.pop_back();
                }
                stack.push_back(tmp);
            }
        }
        // stakc 里面的数据此时全是加法运算
        int ret = 0;
        for(auto& e : stack) ret += e;
        return ret;
    }
};
相关推荐
黄金龙PLUS几秒前
Xoodoo置换算法的优缺点
算法·网络安全·密码学·哈希算法·同态加密
Cccp.1234 分钟前
【leetcode】(四)排序算法汇总和链表
leetcode·链表·排序算法
杰克尼21 分钟前
同城拼车项目面试问题_01
spring·面试·职场和发展
YonyouHRSaaS29 分钟前
2026年AI招聘系统怎么选?AI面试功能怎么评估?
人工智能·面试·职场和发展·求职招聘·ai面试
LayZhangStrive32 分钟前
数据结构与算法 - 堆排序
java·数据结构·算法·排序算法·堆排序·大根堆
cpp_learner1 小时前
C++ 实现责任链模式(Chain of Responsibility):从一堆 if-else 到可插拔的处理管道
c++·设计模式
residual_fan1 小时前
深度渐进收缩学习(DPSL):面向强噪声与类内分散的机械复合故障诊断方法
人工智能·算法·数据挖掘·数据分析
一木 之林1 小时前
五、C++ 新特性、关键字与编译原理(进阶)(一)
c语言·开发语言·c++
2601_962298271 小时前
交易开拓者通常使用什么编程语言?这种语言如何帮助自动化交易?
java·c++·python·编程语言·自动化交易
码匠许师傅1 小时前
【设计模式精讲】23.备忘录模式(Memento)
c++·设计模式·软件工程·uml·备忘录模式