长春快速建站模板,简约设计网站,wordpress柒比贰,大自然的网站设计150. 逆波兰表达式求值 - 力扣#xff08;LeetCode#xff09;
思路#xff1a;定义一个名为 Solution 的类#xff0c;并在其中定义了一个名为 evalRPN 的公共函数。这个函数接受一个由字符串组成的向量 tokens 作为输入#xff0c;并返回一个整数。 在代码中#xff0…150. 逆波兰表达式求值 - 力扣LeetCode
思路定义一个名为 Solution 的类并在其中定义了一个名为 evalRPN 的公共函数。这个函数接受一个由字符串组成的向量 tokens 作为输入并返回一个整数。 在代码中首先定义了一个栈 st用于存储运算过程中的中间结果。 接下来代码使用一个 for 循环遍历 tokens 中的每个字符串。在循环中首先判断字符串是否为运算符、-、*、/如果是则进行相应的运算。具体来说先将栈顶的两个数 pop 出来然后根据运算符进行加、减、乘、除等运算并将结果 push 回栈中。 如果遇到的字符串不是运算符则直接将其转换为整数并 push 入栈中。 最后代码返回栈顶的数值即最终的计算结果。 如果用这个代码就是测试用列就通不过
class Solution {
public:int evalRPN(vectorstring tokens) {
stackint st;for(auto str:tokens)
{if( str||str-||str*||str/)
{int leftst.top();st.pop();int rightst.top();st.pop();switch(str[0])
{case :
st.push(leftright);
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(vectorstring tokens) {
stackint st;for(auto str:tokens)
{
if(str||str-||str*||str/
)
{int leftst.top();st.pop();int rightst.top();st.pop();switch(str[0])
{case :
st.push(leftright);
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(vectorstring tokens) {stackint st;for(auto str:tokens)
{if( str||str-||str*||str/){int rightst.top();st.pop();int leftst.top();st.pop();switch(str[0]){case :st.push(leftright);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();}
}; 两段代码的区别 int leftst.top();st.pop();int rightst.top();st.pop();int rightst.top();st.pop();int leftst.top();st.pop();
我刚开始以为left right就是两个变量随便哪个先定义无所谓但是下面的运算中有/left和right谁先出栈谁就在前面作为被除数谁作为被输数会影响到结果。