leetcode 227. 基本计算器 II

题目描述

实现一个基本的计算器来计算一个简单的字符串表达式的值。
字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 。 整数除法仅保留整数部分。

示例 1:
输入: “3+2*2”
输出: 7

示例 2:
输入: “ 3/2 “
输出: 1

示例 3:
输入: “ 3+5 / 2 “
输出: 5

题解

遍历字符串 s ,取出数值 num 存入 stack 栈中,主要是通过前边的操作符 op 判断如何存入数值,+, - 则直接存 num 的值或者取反后再存入,*, / 的话则要计算之后再存入,最后把 stack 栈中的数值相加起来

示例代码(go)

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
func calculate(s string) int {
stack := make([]int, 0)
res := 0
n := len(s)
var op byte
op = '+'
num := 0
for i := 0; i < n; i++ {
if s[i] >= '0' {
num = num * 10 + int(s[i] - '0')
}
if (s[i] < '0' && s[i] != ' ') || i == n-1 {
if op == '+' {
stack = append(stack, num)
}
if op == '-' {
stack = append(stack, -num)
}
if op == '*' {
tmp := stack[len(stack)-1] * num
stack = stack[:len(stack)-1]
stack = append(stack, tmp)
}
if op == '/' {
tmp := stack[len(stack)-1] / num
stack = stack[:len(stack)-1]
stack = append(stack, tmp)
}
num = 0
op = s[i]
}
}
for _, v := range stack {
res += v
}
return res
}