-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path150-Eval-Reverse-Polish-Notation.cpp
More file actions
78 lines (62 loc) · 2.31 KB
/
Copy path150-Eval-Reverse-Polish-Notation.cpp
File metadata and controls
78 lines (62 loc) · 2.31 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*
Problem:
You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation.
Evaluate the expression. Return an integer that represents the value of the expression.
Note that:
The valid operators are '+', '-', '*', and '/'.
Each operand may be an integer or another expression.
The division between two integers always truncates toward zero.
There will not be any division by zero.
The input represents a valid arithmetic expression in a reverse polish notation.
The answer and all the intermediate calculations can be represented in a 32-bit integer.
Example 1:
Input: tokens = ["2","1","+","3","*"]
Output: 9
Explanation: ((2 + 1) * 3) = 9
Example 2:
Input: tokens = ["4","13","5","/","+"]
Output: 6
Explanation: (4 + (13 / 5)) = 6
Example 3:
Input: tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
Output: 22
Explanation: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22
*/
/*
Explanation:
Even though this is a Medium problem on LeetCode, this is problem is not very difficult.
It largely is requires knowledge on Reverse Polish Notation form and an of understanding how they relate
to Stack data stuctures.
To solve this problem, simply iterate through each token.
If the token is a number, convert it from a string to a integer and add it to the stack.
If it is one of the operands, pop two integers from the stack, complete the operation, and add
the resulting operation. The whole operation of Reverse Polish Notation functions as a simple stack!
Time Complexity: 0(n)
*/
#include <string>
class Solution {
public:
int evalRPN(vector<string>& tokens) {
stack<int> s;
for(auto& t : tokens)
if(t == "+" || t == "-" || t == "*" || t == "/") {
int op1 = s.top();
s.pop();
int op2 = s.top();
s.pop();
if(t == "+") op1 = op2 + op1;
if(t == "-") op1 = op2 - op1;
if(t == "/") op1 = op2 / op1;
if(t == "*") op1 = op2 * op1;
s.push(op1);
}
else s.push(stoi(t)); // stoi - converts from string to int
return s.top();
}
};