您的位置:首页 > 编程语言 > Lua

150. Evaluate Reverse Polish Notation

2017-04-09 22:33 316 查看
问题描述

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();
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: