LeetCode #150. 逆ポーランド式評価問題解C/C++
接尾辞式を入力するので、接尾辞式を接尾辞式に変換する必要はありません.数字を読み込んでスタックに入り、記号を読み込むときにスタックの上の2つの要素をスタックから出します.つまり、2つの操作数です.演算を行った後、結果をスタックに入れます.最後のスタックには最後の実行結果しか残っていません.スタックの上の要素に戻ればいいです.また注意先出桟の要素は右操作数、後出桟は左操作数、演算時は順番に注意
class Solution {
public:
int isNumber(string s) {
return !(s=="+"||s=="-"||s=="*"||s=="/");
}
int evalRPN(vector<string>& tokens) {
stack<int> stk;//
int len = tokens.size();
for(int i = 0;i<len;++i) {
string str = tokens[i];
if(isNumber(str)) {
//
// int x;
// stringstream ss(str);
// while(ss>>x)stk.push(x);
stk.push(atoi(str.c_str()));
}
else {
int a = stk.top();stk.pop();//
int b = stk.top();stk.pop();//
switch(str[0]) {
case '+':stk.push(b+a);break;
case '-':stk.push(b-a);break;
case '*':stk.push(b*a);break;
case '/':stk.push(b/a);break;
}
}
}
return stk.top();
}
};