【剑斩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;
    }
};
相关推荐
生态学者4 小时前
Global Change Biology | 森林越“步调一致”,反而越怕干旱?树木生长与叶片活动的同步之谜
大数据·人工智能·算法·r语言·微信公众平台
所以遗憾是什么呢?4 小时前
【题解】Educational Codeforces Round 195 (Rated for Div. 2) ABCDE
c++·动态规划·acm·icpc·ccpc·xcpc·codeforecs
lsswear4 小时前
Agent 框架新手入门与实战部署指南
大数据·人工智能·算法
考研保研资料分享5 小时前
2022编辑出版跨保西北大学中国史:五校面试与九月补材料
面试·职场和发展
Lhan.zzZ5 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
Data analyse4566 小时前
rnweb 回放数据量太大怎么办?分片存储与断点续传的实现思路
前端·网络·算法·数据分析
员工风险管理实务6 小时前
职务侵占有什么价值?岗位关联性与必要性判断
职场和发展
sysu_chenxy7 小时前
二重循环输出二维图形
c++
Navigator_Z7 小时前
LeetCode //C - 1293. Shortest Path in a Grid with Obstacles Elimination
c语言·算法·leetcode
Nil2088 小时前
leetcode 64最小路径和
算法·leetcode·职场和发展