-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathBasicCalculator-II_227.cpp
95 lines (78 loc) · 2.37 KB
/
BasicCalculator-II_227.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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
~ Author : https://leetcode.com/tridib_2003/
~ Problem : 227. Basic Calculator II
~ Link : https://leetcode.com/problems/basic-calculator-ii/
*/
/* Approach 1 : (Using Stack) */
/*
class Solution {
public:
int calculate(string s) {
int n = s.size();
int result = 0, currNum = 0;
char sign = '+';
stack<int> stk;
for (int i = 0; i < n; ++i) {
if (isdigit(s[i]))
currNum = (currNum * 10) + (s[i] - '0');
if (!isdigit(s[i]) && !iswspace(s[i]) || i == n - 1) {
if (sign == '+')
stk.push(currNum);
else if (sign == '-')
stk.push(-currNum);
else if (sign == '*') {
int stackTop = stk.top();
stk.pop();
stk.push(stackTop * currNum);
}
else if (sign == '/') {
int stackTop = stk.top();
stk.pop();
stk.push(stackTop / currNum);
}
sign = s[i];
currNum = 0;
}
}
while (!stk.empty()) {
result += stk.top();
stk.pop();
}
return result;
}
};
*/
// Time Complexity - O(n)
// Space Complexity - O(1)
/* Approach 2 : (Using constant extra space) */
class Solution {
public:
int calculate(string s) {
int n = s.size();
char sign = '+';
int result = 0, currNum = 0, lastNum = 0;
for (int i = 0; i < n; ++i) {
if (isdigit(s[i])) {
currNum = (currNum * 10) + (s[i] - '0');
}
if (!isdigit(s[i]) && !iswspace(s[i]) || i == n - 1) {
if (sign == '+' || sign == '-') {
result += lastNum;
lastNum = (sign == '+') ? currNum : -currNum;
}
else if (sign == '*') {
lastNum *= currNum;
}
else if (sign == '/') {
lastNum /= currNum;
}
sign = s[i];
currNum = 0;
}
}
result += lastNum;
return result;
}
};
// Time Complexity - O(n)
// Space Complexity - O(1)