一、Leetcode第150题:逆波兰表达式
思路:本题和相邻相同字符串消除很像,都是在某种条件下将两个相邻的元素进行一定操作,非常适合用栈来解决。
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<long long> cal; // 需要用long long
for(int ii = 0; ii < tokens.size(); ii++) {
if( (tokens[ii] != "+") && (tokens[ii] != "-") && (tokens[ii] != "*") && (tokens[ii] != "/") )
cal.push(stoll(tokens[ii])); // stoll用于将 str 转换成 long long stoi stil 分别转换成int 和 long
else {
long long right = cal.top(); // 取栈顶为右值
cal.pop();
long long left = cal.top(); // 取栈顶为左值
cal.pop();
if(tokens[ii] == "+") cal.push(left + right);
else if(tokens[ii] == "-") cal.push(left - right);
else if(tokens[ii] == "*") cal.push(left * right);
else cal.push(left / right); // 将结果压入栈中
}
}
return cal.top();
}
};