问题描述
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:
int evalRPN(vector<string>& tokens) {
if (tokens.empty())
return 0;
stack<int> st;
for(int i = 0; i < tokens.size(); ++i) {
if (tokens[i][0] <= '9' && tokens[i][0] >= '0') {
int num = 0;
for (int j = 0; j < tokens[i].length(); ++j) {
num *= 10;
num += tokens[i][j]-'0';
}
st.push(num);
} else if (tokens[i].length() == 1){
if (tokens[i][0] == '+') {
int t1 = st.top();
st.pop();
int t2 = st.top();
st.pop();
st.push(t1+t2);
} else if (tokens[i][0] == '*') {
int t1 = st.top();
st.pop();
int t2 = st.top();
st.pop();
st.push(t1*t2);
} else if (tokens[i][0] == '/') {
int t1 = st.top();
st.pop();
int t2 = st.top();
st.pop();
st.push(t2/t1);
} else {
int t1 = st.top();
st.pop();
int t2 = st.top();
st.pop();
st.push(t2-t1);
}
} else {
int num = 0;
for (int j = 1; j < tokens[i].length(); ++j) {
num *= 10;
num += tokens[i][j]-'0';
}
st.push(-num);
}
}
return st.top();
}
};