【C++算法】67.栈_基本计算器 II

文章目录


题目链接:

227. 基本计算器 II


题目描述:


解法

表达式求值,一般是用栈来模拟计算过程。


C++ 算法代码:

cpp 复制代码
class Solution 
{
public:
    int calculate(string s) 
    {
        // 简单计算器算法
        // 基本思路:使用栈处理表达式,遵循运算符优先级规则
        
        vector<int> st; // 用数组来模拟栈结构,存储操作数和计算结果
        int i = 0, n = s.size(); // i是当前处理的位置,n是字符串长度
        char op = '+'; // 初始运算符设为加号,用于处理第一个数
        
        while(i < n)
        {
            if(s[i] == ' ') 
                i++; // 跳过空格
                
            else if(s[i] >= '0' && s[i] <= '9') // 遇到数字
            {
                // 提取完整的多位数字
                int tmp = 0;
                while(i < n && s[i] >= '0' && s[i] <= '9') 
                    tmp = tmp * 10 + (s[i++] - '0');
                
                // 根据之前的运算符进行相应操作
                if(op == '+') 
                    st.push_back(tmp); // 加法:将数字入栈
                else if(op == '-') 
                    st.push_back(-tmp); // 减法:将负数入栈
                else if(op == '*') 
                    st.back() *= tmp; // 乘法:将栈顶元素与当前数相乘
                else 
                    st.back() /= tmp; // 除法:将栈顶元素除以当前数
            }
            else // 遇到运算符
            {
                op = s[i]; // 记录当前运算符,用于处理下一个数
                i++;
            }
        }
        
        // 计算最终结果:将栈中所有数相加
        int ret = 0;
        for(auto x : st) ret += x;
        
        return ret;
    }
};
相关推荐
月疯7 小时前
二分法算法(水平等分图形面积)
算法
豆瓣鸡7 小时前
算法日记 - Day3
java·开发语言·算法
白白白小纯7 小时前
算法篇—反转链表
c语言·数据结构·算法·leetcode
Achou.Wang7 小时前
深入理解go语言-第5章 并发编程——Go的灵魂
大数据·算法·golang
韭菜炒鸡肝天8 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
The Chosen One9858 小时前
高进度算法模板速记(待完善)
java·前端·算法
Aaron - Wistron8 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
Dxy12393102169 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python
05664610 小时前
Python康复训练——常用标准库
开发语言·python·学习
骊城英雄10 小时前
基于C#+avalonia ui实现的跨平台点胶机灌胶监控控制上位机软件
开发语言·ui·c#