leetcode oj

150. 逆波兰表达式求值 - 力扣(LeetCode)

思路:定义一个名为 Solution 的类,并在其中定义了一个名为 evalRPN 的公共函数。这个函数接受一个由字符串组成的向量 tokens 作为输入,并返回一个整数。

在代码中,首先定义了一个栈 st,用于存储运算过程中的中间结果。

接下来,代码使用一个 for 循环遍历 tokens 中的每个字符串。在循环中,首先判断字符串是否为运算符(+、-、*、/),如果是,则进行相应的运算。具体来说,先将栈顶的两个数 pop 出来,然后根据运算符进行加、减、乘、除等运算,并将结果 push 回栈中。

如果遇到的字符串不是运算符,则直接将其转换为整数,并 push 入栈中。

最后,代码返回栈顶的数值,即最终的计算结果。

如果用这个代码就是测试用列就通不过:

cpp 复制代码
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
stack<int> st;

for(auto str:tokens)
{
   if( str=="+"
        ||str=="-"
        ||str=="*"
        ||str=="/"
      )
{
    int left=st.top();
    st.pop();
    int right=st.top();
    st.pop();



switch(str[0])
{
    case '+':
st.push(left+right);
break;
case '-':
st.push(left-right);
break;
case '*':
st.push(left*right);
break;
case '/':
st.push(left/right);
break;
}
}
else
{
       st.push(stoi(str));
}
}
return st.top();
    }
};

这个代码就过了:

cpp 复制代码
class Solution {
public:
    int evalRPN(vector<string>& tokens) {
stack<int> st;

for(auto str:tokens)
{
if(str=="+"||
   str=="-"||
   str=="*"||
   str=="/"
)    
{
    int left=st.top();
    st.pop();
    int right=st.top();
    st.pop();



switch(str[0])
{
    case '+':
st.push(left+right);
break;
case '-':
st.push(left-right);
break;
case '*':
st.push(left*right);
break;
case '/':
st.push(left/right);
break;
}
}
else
{
       st.push(stoi(str));
}
}
return st.top();
    }
};


class Solution {
public:
    int evalRPN(vector<string>& tokens) {


stack<int>  st;


for(auto str:tokens)
{
    if( str=="+"
        ||str=="-"
        ||str=="*"
        ||str=="/"
      )
         {
             int right=st.top();
             st.pop();
             int left=st.top();
             st.pop();
             switch(str[0])
             {
                  case '+':
                  st.push(left+right);
                  break;
                  case '-':
                  st.push(left-right);
                  break;
                  case '*':
                  st.push(left*right);
                  break;
                  case '/':
                  st.push(left/right);
                  break;
             }
         }
         else
         {
             st.push(stoi(str));
         }

}
return st.top();
    }
};

两段代码的区别:

cpp 复制代码
   

    int left=st.top();
    st.pop();
    int right=st.top();
    st.pop();



 int right=st.top();
    st.pop();
    int left=st.top();
    st.pop();

我刚开始以为left right就是两个变量,随便哪个先定义无所谓,但是下面的运算中有"/",left和right谁先出栈谁就在前面作为被除数,谁作为被输数会影响到结果。

相关推荐
DuHz7 分钟前
论文解读:用于数据分析的极值点对称模态分解方法 (Extreme-point Symmetric Mode Decomposition,ESMD)
论文阅读·算法·信息与通信·信号处理
菜小麒22 分钟前
面试问题-01
面试·职场和发展
HZZD_HZZD26 分钟前
用电负荷聚类分析实战:基于`scikit-learn`的`K-Means`与`DBSCAN`双算法对比、`PCA`降维可视化与智能电表负荷画像全流程
算法·scikit-learn·kmeans
MIngYaaa52040 分钟前
2026暑期牛客多校1 2026-7-17
数据结构·算法
wabs66640 分钟前
关于图论【卡码网107.寻找存在的路线的思考】
数据结构·算法·图论
半兽先生1 小时前
大模型技术开发与应用——4.大模型提示词工程实战
人工智能·算法
wuminyu1 小时前
JUC组件逐层剥离与深度剖析
java·linux·c语言·jvm·c++·算法
城管不管2 小时前
重生——第五次面试2026.8.1一面
java·数据库·后端·ai·面试·职场和发展·agent
圣保罗的大教堂2 小时前
leetcode 3016. 输入单词需要的最少按键次数 II 中等
leetcode
hhzz2 小时前
机器学习-算法模型系列文章:07-SVM 一巴掌拍出来的超平面:SVM核函数选错,再干净的数据也救不了你
算法·机器学习·支持向量机