【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;
    }
};
相关推荐
luj_17682 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
不听话坏3 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript
mCell3 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
likeyi073 小时前
require 和 import的区别
开发语言·前端
远离UE43 小时前
UE5 compute shader 原子加
开发语言·c++·ue5
C+-C资深大佬3 小时前
C++ 显式类型转换详解:static_cast、dynamic_cast、const_cast、reinterpret_cast
开发语言·c++
KaMeidebaby4 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17685 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
取地址符5 小时前
C++学习笔记(基于learn-cxx)(1)
c++·经验分享·笔记·学习
tmlx3I0815 小时前
高光谱拼接算法(六)RANSAC 误匹配剔除
人工智能·算法·机器学习