当前位置: 面试刷题>> 表达式求值 (经典算法题500道)
### 题目描述补充
题目:**表达式求值**
给定一个字符串形式的表达式,该表达式可能包含整数、加号(`+`)、减号(`-`)、乘号(`*`)和除号(`/`)。你需要计算并返回该表达式的值。
**注意**:
1. 表达式中的操作数(整数和结果)可能是32位整数。
2. 除数不能为0。
3. 表达式中的操作数之间用单个空格隔开。
4. 不需要考虑括号的使用。
5. 表达式中的整数没有前导零,例如,“01”、“003”或“0.1”是不允许的。
### 示例
**输入**: "3 + 2 * 2"
**输出**: 7
**解释**: 根据运算优先级,先进行乘法操作(2 * 2 = 4),然后加法操作(3 + 4 = 7)。
### PHP 代码示例
```php
```
### Python 代码示例
```python
def evaluateExpression(expression):
stack = []
operators = {'+', '-', '*', '/'}
i = 0
while i < len(expression):
if expression[i].isdigit() or (expression[i] == '-' and i == 0 or not expression[i-1].isdigit()):
num = 0
# 处理多位数和负数
while i < len(expression) and expression[i].isdigit():
num = num * 10 + int(expression[i])
i += 1
if i < len(expression) and expression[i] in operators:
i -= 1
stack.append(num)
elif expression[i] in operators:
operand2 = stack.pop()
operand1 = stack.pop()
if expression[i] == '+':
stack.append(operand1 + operand2)
elif expression[i] == '-':
stack.append(operand1 - operand2)
elif expression[i] == '*':
stack.append(operand1 * operand2)
elif expression[i] == '/':
if operand2 == 0:
raise Exception("Division by zero")
stack.append(operand1 // operand2) # 整数除法
i += 1
return stack[0]
print(evaluateExpression("3 + 2 * 2")) # 输出 7
```
### JavaScript 代码示例
```javascript
function evaluateExpression(expression) {
const stack = [];
const tokens = expression.split(' ');
for (const token of tokens) {
if (!isNaN(token)) {
stack.push(parseInt(token));
} else {
const operand2 = stack.pop();
const operand1 = stack.pop();
switch (token) {
case '+':
stack.push(operand1 + operand2);
break;
case '-':
stack.push(operand1 - operand2);
break;
case '*':
stack.push(operand1 * operand2);
break;
case '/':
if (operand2 === 0) {
throw new Error("Division by zero");
}
stack.push(Math.trunc(operand1 / operand2)); // 整数除法
break;
}
}
}
return stack[0];
}
console.log(evaluateExpression("3 + 2 * 2")); // 输出 7
```
**码小课**网站中有更多关于算法和数据结构的内容,欢迎大家前去学习交流。