day11
用栈来解决,出现一个字符,就操作前面存过的字符
1.括号匹配,出现了右括号,就判断栈顶元素是否匹配
2.字母消除,每碰到一个元素,就判断是否与栈顶相同,相同就弹出,不相同就压入
3.表达式 碰到数字就压入,碰到操作符就取出栈顶的元素
思路:
碰到数字就存入栈,碰到操作符就取出栈顶的两个元素,操作之后,压入栈
注意点:
1. long long
2.类型转化:
string -- > 其他类型 stoll stoi stod
常用的 stoll stod , 因为可以向下兼容
3. 是用 num2 - num1 。 因为栈出来的顺序是相反的。后入先出
class Solution {
stack<long long> st;
public:
int evalRPN(vector<string>& tokens) {
for(int i = 0; i <tokens.size(); i++)
{
if(tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/")
{
long long num1 = st.top(); st.pop();
long long num2 = st.top(); st.pop();
if(tokens[i] == "+")
st.push(num1 + num2);
else if(tokens[i] == "-")
st.push(num2 - num1);
else if(tokens[i] == "*")
st.push(num2 * num1);
else
st.push(num2/num1);
}
else
st.push(stoll(tokens[i])); // 注意类型转化 string --> long long
}
return st.top();
}
};