【剑斩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;
    }
};
相关推荐
xin(n_n)b29 分钟前
经典题目(3):把数字翻译成字符串;兑换零钱
算法
学iOS很快乐32 分钟前
Pinterest Staff SDE 五轮面试全过,加拿大 TC 500K CAD,附 OA 真题和每轮考点
面试·职场和发展
惊鸿一博37 分钟前
特征匹配+Glue Factory 框架评估特征提取与匹配算法时常用的度量标准
算法·特征匹配
-西门吹雪42 分钟前
现代C++ 并发编程-学习指南
java·jvm·c++
柒和远方42 分钟前
LeetCode 4. 寻找两个正序数组的中位数 —— 二分划分的艺术
javascript·python·算法
z小猫不吃鱼2 小时前
模型剪枝经典论文精读:Channel Pruning for Accelerating Very Deep Neural Networks
算法·机器学习·剪枝
njsgcs2 小时前
已知链中心距用节数算中间电机摆放位置 常量弧长 三链轮弦长模型算法
算法
aaPIXa6222 小时前
C++ TensorRT Edge-LLM 边缘推理框架:从原理到实战
开发语言·c++·edge
2601_962440843 小时前
计算机毕业设计之jsp旅游网站管理系统
java·开发语言·算法·课程设计·旅游·推荐算法
池塘的蜗牛3 小时前
AFDM波形基于DFT的通感一体化
算法