【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;
    }
};
相关推荐
wangz765 分钟前
kotlin,Android,血压记录程序
android·开发语言·kotlin·jetpack compose
沐墨专攻技术1 小时前
《空间复杂度(C语言)》
c语言·数据结构·算法·空间复杂度
wuqingshun3141592 小时前
蓝桥杯 6. k倍区间
c++·算法·职场和发展·蓝桥杯·深度优先
明月看潮生3 小时前
青少年编程与数学 02-016 Python数据结构与算法 29课题、自然语言处理算法
python·算法·青少年编程·自然语言处理·编程与数学
努力学习的小廉3 小时前
【C++】 —— 笔试刷题day_20
开发语言·c++
西柚小萌新4 小时前
【Python爬虫基础篇】--1.基础概念
开发语言·爬虫·python
涛ing4 小时前
【Linux “less“ 命令详解】
linux·运维·c语言·c++·人工智能·vscode·bash
ghost1434 小时前
C#学习第17天:序列化和反序列化
开发语言·学习·c#
愚润求学5 小时前
【数据结构】红黑树
数据结构·c++·笔记
竹下为生5 小时前
LeetCode --- 154双周赛
算法·leetcode·哈希算法