evaluate-reverse-polish-notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are+,-,*,/. Each operand may be an integer or another expression.
Some examples:
[“2”, “1”, “+”, “3”, “*”] -> ((2 + 1) * 3) -> 9
[“4”, “13”, “5”, “/”, “+”] -> (4 + (13 / 5)) -> 6
栈的裸题
class Solution {
public:
//思路很简单,用栈,遇到符号退两栈运算,逻辑五分钟就写出来了,C++string比较弄死我了
int evalRPN(vector<string> &tokens) {
stack<int> st;
for(auto token : tokens)
{
if(token == "+" || token == "-" || token == "*" || token == "/")
{
int op1 , op2 , res;
//注意这里应该是 op1 -/ op2
op2 = st.top();
st.pop();
op1 = st.top();
st.pop();
//这里坑死我了,因为这里的token是字符串,“+”是个char,不能直接==判断
//strcmp要求两个输入是const char*,因此要把string转换为C-Style的string
//我不知道答案里的那些 == 是怎么通过编译的
//也可以用string.compare("xxxx")比较
if(token.compare("+") == 0)
res = op1 + op2;
if(strcmp(token.c_str(),"-") == 0)
res = op1 - op2;
if(strcmp(token.c_str(),"*") == 0)
res = op1 * op2;
if(strcmp(token.c_str(),"/") == 0)
res = op1 / op2;
st.push(res);
}
else
{
//stringstream,whatever U spit to it,it will be the same kind with the one which U spit to.
//有点像别人嘴巴嚼过的。。
stringstream ss;
ss<<token;
int temp;
ss>>temp;
st.push(temp);
}
}
return st.top();
}
};
C++ string的类型比较
strcmp(,)需要两个输入都是const char*
string.compare() 更好