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();
	}
};