【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;
    }
};
相关推荐
minji...11 分钟前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
Dxy123931021617 分钟前
Python基于BERT的上下文纠错详解
开发语言·python·bert
语戚1 小时前
力扣 968. 监控二叉树 —— 贪心 & 树形 DP 双解法递归 + 非递归全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·
skywalker_111 小时前
力扣hot100-7(接雨水),8(无重复字符的最长子串)
算法·leetcode·职场和发展
wjs20242 小时前
JavaScript 语句
开发语言
bIo7lyA8v2 小时前
算法稳定性分析中的输入扰动建模的技术9
算法
CoderCodingNo2 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法
sinat_286945192 小时前
AI Coding 时代的 TDD:从理念到工程落地
人工智能·深度学习·算法·tdd