题目
逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。逆波兰表达式主要有以下两个优点:
1.去掉括号后表达式无歧义,也可以依据次序计算出正确结果。
2.适合用栈操作运算:遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。
思路
遇到数字则入栈;遇到算符则取出栈顶两个数字进行计算,并将结果压入栈中。
代码
1 class Solution { 2 public: 3 int evalRPN(vector<string>& tokens) { 4 stack<int>stk; 5 for(int i = 0;i < tokens.size();i++){ 6 if(tokens[i] == "+" || 7 tokens[i] == "-" || tokens[i] == "*" || tokens[i] == "/"){ 8 int a = stk.top(); 9 stk.pop(); 10 int b = stk.top(); 11 stk.pop(); 12 if(tokens[i] == "+") stk.push(b+a); 13 if(tokens[i] == "-") stk.push(b-a); 14 if(tokens[i] == "*") stk.push(b*a); 15 if(tokens[i] == "/") stk.push(b/a); 16 } 17 else{ 18 stk.push(stoi(tokens[i])); 19 } 20 } 21 return stk.top(); 22 } 23 };
总结:
字符串转换为数字,直接用stoi函数,头文件时#include<cstring>,该函数会做范围检查,默认在int范围内,如果超出 int 范围会报 runtime error
有关C++ 数字和字符串互相转换