LeetCode150. 逆波兰表达式求值

题目

逆波兰表达式是一种后缀表达式,所谓后缀就是指算符写在后面。逆波兰表达式主要有以下两个优点:

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++ 数字和字符串互相转换

上一篇:316. 去除重复字母 leetcode


下一篇:Feel Good POJ - 2796