【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;
    }
};
相关推荐
刘海东刘海东10 分钟前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习
2301_8050545621 分钟前
Python训练营打卡Day59(2025.7.3)
开发语言·python
胖大和尚35 分钟前
clang 编译器怎么查看在编译过程中做了哪些优化
c++·clang
pumpkin8451436 分钟前
Rust 调用 C 函数的 FFI
c语言·算法·rust
lsx2024061 小时前
CSS 网页布局:从基础到进阶
开发语言
挺菜的1 小时前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法
mit6.8241 小时前
7.6 优先队列| dijkstra | hash | rust
算法
蜗牛沐雨1 小时前
警惕 Rust 字符串的性能陷阱:`chars().nth()` 的深坑与高效之道
开发语言·后端·rust
2401_858286111 小时前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序
钱彬 (Qian Bin)2 小时前
一文掌握Qt Quick数字图像处理项目开发(基于Qt 6.9 C++和QML,代码开源)
c++·开源·qml·qt quick·qt6.9·数字图像处理项目·美观界面