当前位置: 面试刷题>> 表达式求值 (经典算法题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 ``` **码小课**网站中有更多关于算法和数据结构的内容,欢迎大家前去学习交流。
推荐面试题