-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path150.cpp
81 lines (72 loc) · 1.84 KB
/
150.cpp
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
79
80
81
#include <functional>
#include <gtest/gtest.h>
#include <stack>
#include <string>
#include <unordered_map>
#include <vector>
using namespace std;
class Solution {
public:
int evalRPN(vector<string> &tokens)
{
unordered_map<string, function<int(int, int)>> map = {
{"+", [](int a, int b) { return a + b; }},
{"-", [](int a, int b) { return a - b; }},
{"*", [](int a, int b) { return a * b; }},
{"/", [](int a, int b) { return a / b; }}};
stack<int> st;
for (const string &token : tokens) {
if (map.count(token) == 0) {
st.push(stoi(token));
}
else {
int num2 = st.top();
st.pop();
int num1 = st.top();
st.pop();
st.push(map[token](num1, num2));
}
}
return st.top();
}
};
class Testing : public testing::Test {
public:
Solution soln;
};
TEST_F(Testing, Case1)
{
vector<string> tokens = {"2", "1", "+", "3", "*"};
EXPECT_EQ(soln.evalRPN(tokens), 9);
}
TEST_F(Testing, Case2)
{
vector<string> tokens = {"4", "13", "5", "/", "+"};
EXPECT_EQ(soln.evalRPN(tokens), 6);
}
TEST_F(Testing, Case3)
{
vector<string> tokens = {"10", "6", "9", "3", "/", "-", "11",
"*", "+", "17", "+", "5", "+"};
EXPECT_EQ(soln.evalRPN(tokens), 65);
}
TEST_F(Testing, Case4)
{
vector<string> tokens = {"4", "3", "-"};
EXPECT_EQ(soln.evalRPN(tokens), 1);
}
TEST_F(Testing, Case5)
{
vector<string> tokens = {"4", "3", "+"};
EXPECT_EQ(soln.evalRPN(tokens), 7);
}
TEST_F(Testing, Case6)
{
vector<string> tokens = {"4", "3", "*"};
EXPECT_EQ(soln.evalRPN(tokens), 12);
}
TEST_F(Testing, Case7)
{
vector<string> tokens = {"4", "3", "/"};
EXPECT_EQ(soln.evalRPN(tokens), 1);
}