File tree 1 file changed +17
-30
lines changed
1 file changed +17
-30
lines changed Original file line number Diff line number Diff line change 1
1
class Solution {
2
2
public int calculate (String s ) {
3
- char sign = '+' ;
4
3
int currNum = 0 ;
5
- Stack <Integer > stack = new Stack <>();
4
+ int prevNum = 0 ;
5
+ int result = 0 ;
6
+ char operation = '+' ;
6
7
for (int i = 0 ; i < s .length (); i ++) {
7
- if (Character .isDigit (s .charAt (i ))) {
8
- currNum = currNum * 10 + Character .getNumericValue (s .charAt (i ));
8
+ char c = s .charAt (i );
9
+ if (Character .isDigit (c )) {
10
+ currNum = currNum * 10 + Character .getNumericValue (c );
9
11
}
10
- if ((!Character .isDigit (s .charAt (i )) && s .charAt (i ) != ' ' ) || i == s .length () - 1 ) {
11
- updateStackForPreviousSign (sign , stack , currNum );
12
+ if ((!Character .isDigit (c ) && !Character .isWhitespace (c )) || i == s .length () - 1 ) {
13
+ if (operation == '-' || operation == '+' ) {
14
+ result += prevNum ;
15
+ prevNum = operation == '+' ? currNum : -currNum ;
16
+ } else if (operation == '*' ) {
17
+ prevNum = prevNum * currNum ;
18
+ } else {
19
+ prevNum = prevNum / currNum ;
20
+ }
21
+ operation = c ;
12
22
currNum = 0 ;
13
- sign = s .charAt (i );
14
23
}
15
24
}
16
- int result = 0 ;
17
- while (!stack .isEmpty ()) {
18
- result += stack .pop ();
19
- }
25
+ result += prevNum ;
20
26
return result ;
21
27
}
22
-
23
- private void updateStackForPreviousSign (char sign , Stack <Integer > stack , int currNum ) {
24
- switch (sign ) {
25
- case '+' :
26
- stack .push (currNum );
27
- break ;
28
- case '-' :
29
- stack .push (-1 * currNum );
30
- break ;
31
- case '/' :
32
- stack .push (stack .pop () / currNum );
33
- break ;
34
- case '*' :
35
- stack .push (stack .pop () * currNum );
36
- break ;
37
- default :
38
- break ;
39
- }
40
- }
41
28
}
You can’t perform that action at this time.
0 commit comments