Skip to content

Commit bde3c2b

Browse files
committed
basic_calculator_II
1 parent ffc0de7 commit bde3c2b

File tree

2 files changed

+58
-1
lines changed

2 files changed

+58
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ Golang solution for leetcode. For each problem, there is a simple *_test.go to t
183183
#### [224. Basic Calculator](https://github.com/hitzzc/go-leetcode/tree/master/basic_calculator)
184184
#### [225. Implement Stack using Queues](https://github.com/hitzzc/go-leetcode/tree/master/implement_stack_using_queues)
185185
#### [226. Invert Binary Tree](https://github.com/hitzzc/go-leetcode/tree/master/invert_binary_tree)
186-
186+
#### [227. Basic Calculator II](https://github.com/hitzzc/go-leetcode/tree/master/basic_calculator_II)
187187

188188

189189

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package basic_calculator_II
2+
3+
func calculate(s string) int {
4+
numStack := []int{}
5+
opStack := []byte{}
6+
for i := 0; i < len(s); i++ {
7+
if s[i] >= '0' && s[i] <= '9' {
8+
num := 0
9+
for ; i < len(s) && s[i] >= '0' && s[i] <= '9'; i++ {
10+
num = 10*num + int(s[i]-'0')
11+
}
12+
numStack = append(numStack, num)
13+
i--
14+
} else if s[i] == ' ' {
15+
continue
16+
} else {
17+
for len(opStack) != 0 && priority(opStack[len(opStack)-1]) >= priority(s[i]) {
18+
num := operate(numStack[len(numStack)-2], numStack[len(numStack)-1], opStack[len(opStack)-1])
19+
numStack[len(numStack)-2] = num
20+
numStack = numStack[:len(numStack)-1]
21+
opStack = opStack[:len(opStack)-1]
22+
}
23+
opStack = append(opStack, s[i])
24+
}
25+
}
26+
for len(opStack) != 0 {
27+
num := operate(numStack[len(numStack)-2], numStack[len(numStack)-1], opStack[len(opStack)-1])
28+
numStack[len(numStack)-2] = num
29+
numStack = numStack[:len(numStack)-1]
30+
opStack = opStack[:len(opStack)-1]
31+
}
32+
return numStack[0]
33+
}
34+
35+
func priority(op byte) int {
36+
switch op {
37+
case '*', '/':
38+
return 2
39+
case '+', '-':
40+
return 1
41+
}
42+
return 0
43+
}
44+
45+
func operate(i, j int, op byte) int {
46+
switch op {
47+
case '+':
48+
return i + j
49+
case '-':
50+
return i - j
51+
case '*':
52+
return i * j
53+
case '/':
54+
return i / j
55+
}
56+
return 0
57+
}

0 commit comments

Comments
 (0)