【剑斩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;
    }
};
相关推荐
CheerWWW4 分钟前
C++学习笔记——栈内存与堆内存、宏、auto、std::array
c++·笔记·学习
网络工程小王9 分钟前
【大模型(LLM)的业务开发】学习笔记
人工智能·算法·机器学习
y = xⁿ10 分钟前
【Leet Code 】滑动窗口
java·算法·leetcode
WBluuue13 分钟前
数据结构与算法:二项式定理和二项式反演
c++·算法
nianniannnn13 分钟前
力扣104.二叉树的最大深度 110. 平衡二叉树
算法·leetcode·深度优先
_深海凉_23 分钟前
LeetCode热题100-只出现一次的数字
算法·leetcode·职场和发展
yashuk29 分钟前
C语言 vs. C++ ,哪个更适合初学者?
c语言·c++·面向对象编程·初学者·学习路径
-许平安-36 分钟前
MCP项目笔记十(客户端 MCPClient)
c++·笔记·ai·raii·mcp·pluginapi·plugin system
一只旭宝39 分钟前
【C++ 入门精讲2】函数重载、默认参数、函数指针、volatile | 手写笔记(附完整代码)
c++·笔记
nianniannnn42 分钟前
力扣206.反转链表 92.反转链表II
算法·leetcode·链表