avatar

目录
Leetcode 150 计算后缀表达式的值

LeetCode 150:计算逆波兰式(后缀表达式)的值

运算符仅包含”+”,”-“,”*“和”/“,被操作数可能是整数或其他表达式
例如:
[“2”, “1”, “+”, “3”, “*“] -> ((2 + 1) * 3) -> 9
[“4”, “13”, “5”, “/“, “+”] -> (4 + (13 / 5)) -> 6

这道题整体思路就是使用,对于字符串进行处理,
1.遇到数字直接压入栈,注意这里为char类型的数字,所以需要转换为int

2.遇到”+”,”-“,”*“和”/“符号时,将栈中的两个数字弹出进行计算,再压入栈中

3.最后直到字符串处理完,栈中只剩下一个数字,得到结果

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
class Solution {
public:
int evalRPN(vector<string> &tokens) {
if(tokens.size() == 0)
{
return 0;
}

stack<int> numbers;

for(int i=0;i < tokens.size();i++)
{
string s = tokens[i];
if(s == "+"||s == "-"||s == "*"||s == "/")
{
if(numbers.size() < 2)
{
return 0;//计算结果时,stack至少2个数,否则不合法,返回0
}

int num2 = numbers.top();
numbers.pop();
int num1 = numbers.top();
numbers.pop();

int result;

if(s == "+")
result = num1 + num2;
else if(s == "-")
result = num1 - num2;
else if(s == "*")
result = num1 * num2;
else if(s == "/")
result = num1 / num2;

numbers.push(result);
}
else
{
stringstream ss; //字符串转数字技巧
ss<<s;
int temp;
ss>>temp;
numbers.push(temp);
}
}
return numbers.top();
}
};

C++ 栈 Stack

Code
1
2
3
4
5
6
7
8
9
#include <stack> //头文件

stack<int> stack1; //定义类型为int的空栈

empty() //堆栈为空则返回真
pop() //移除栈顶元素,没有返回值!!!
push() //在栈顶增加元素,没有返回值
size() //返回栈中元素数目
top() //top函数的返回值是栈顶元素,注意并没有删掉栈顶元素!!
文章作者: Bellium
文章链接: https://belliumtang.github.io/2020/03/06/Leetcode150/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Bellium
打赏
  • 微信Wechatpay
    微信Wechatpay
  • 支付宝Alipay
    支付宝Alipay