Skip to content

Commit cc35b78

Browse files
author
Akash Rajpurohit
committed
🧮 Day 24
1 parent e011ee4 commit cc35b78

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
## Week 4 🚧
3535
1. [Unique Morse Code Words](https://leetcode.com/explore/challenge/card/november-leetcoding-challenge/567/week-4-november-22nd-november-28th/3540/) ➡️ [CPP Solution](Week4/uniqueMorseRepresentations.cpp)
3636
2. [House Robber III](https://leetcode.com/explore/challenge/card/november-leetcoding-challenge/567/week-4-november-22nd-november-28th/3541/) ➡️ [CPP Solution](Week4/rob.cpp)
37+
3. [Basic Calculator II](https://leetcode.com/explore/challenge/card/november-leetcoding-challenge/567/week-4-november-22nd-november-28th/3542/) ➡️ [CPP Solution](Week4/calculate.cpp)
3738

3839
## Week 5 🚧
3940
Coming soon...

Week4/calculate.cpp

+65
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
class Solution {
2+
private:
3+
int getPrecedence(char op) {
4+
if(op == '*' || op == '/')
5+
return 1;
6+
7+
return 0;
8+
}
9+
10+
int performOperation(char op, int op1, int op2) {
11+
switch(op) {
12+
case '*':
13+
return op1 * op2;
14+
case '/':
15+
return op1 / op2;
16+
case '+':
17+
return op1 + op2;
18+
case '-':
19+
return op1 - op2;
20+
default:
21+
return 0;
22+
}
23+
}
24+
public:
25+
int calculate(string s) {
26+
stack<int> operandStack;
27+
stack<char> operatorStack;
28+
int n = s.size();
29+
30+
for(int i = 0; i < n; ++i) {
31+
if(isdigit(s[i])) {
32+
int num = 0;
33+
while(i < n && isdigit(s[i])) {
34+
num *= 10;
35+
num += s[i] - '0';
36+
i++;
37+
}
38+
i--;
39+
operandStack.push(num);
40+
} else if(s[i] != ' ') {
41+
int chPrecedence = getPrecedence(s[i]);
42+
43+
while(!operatorStack.empty() && chPrecedence <= getPrecedence(operatorStack.top())) {
44+
char op = operatorStack.top(); operatorStack.pop();
45+
int op2 = operandStack.top(); operandStack.pop();
46+
int op1 = operandStack.top(); operandStack.pop();
47+
48+
operandStack.push(performOperation(op, op1, op2));
49+
}
50+
51+
operatorStack.push(s[i]);
52+
}
53+
}
54+
55+
while(!operatorStack.empty()) {
56+
char op = operatorStack.top(); operatorStack.pop();
57+
int op2 = operandStack.top(); operandStack.pop();
58+
int op1 = operandStack.top(); operandStack.pop();
59+
60+
operandStack.push(performOperation(op, op1, op2));
61+
}
62+
63+
return operandStack.top();
64+
}
65+
};

0 commit comments

Comments
 (0)