【剑斩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;
    }
};
相关推荐
CSCN新手听安3 分钟前
【linux】高级IO,I/O多路转接之poll,接口和原理讲解,poll版本的TCP服务器
linux·运维·服务器·c++·计算机网络·高级io·poll
CSCN新手听安9 分钟前
【linux】网络基础(三)TCP服务端网络版本计算器的优化,Json的使用,服务器守护进程化daemon,重谈OSI七层模型
linux·服务器·网络·c++·tcp/ip·json
m0_736919109 分钟前
C++中的委托构造函数
开发语言·c++·算法
小小小小王王王14 分钟前
洛谷-P1886 【模板】单调队列 / 滑动窗口
c++·算法
网络安全-杰克23 分钟前
Jmeter压力测试工具安装与使用
自动化测试·软件测试·测试工具·jmeter·职场和发展
PPPPPaPeR.41 分钟前
光学算法实战:深度解析镜片厚度对前后表面折射/反射的影响(纯Python实现)
开发语言·python·数码相机·算法
看我干嘛!1 小时前
python第五次作业
算法
历程里程碑1 小时前
Linux 库
java·linux·运维·服务器·数据结构·c++·算法
Sheep Shaun1 小时前
如何让一个进程诞生、工作、终止并等待回收?——探索Linux进程控制与Shell的诞生
linux·服务器·数据结构·c++·算法·shell·进程控制
Pluchon1 小时前
硅基计划4.0 简单模拟实现AVL树&红黑树
java·数据结构·算法