返回
LeetCode 227 题⭐:用 Python 巧解基本计算器 II
前端
2024-01-07 23:33:06
算法思想
LeetCode 227 题的基本思想是使用栈来存储运算符和操作数。我们首先将表达式中的数字和运算符分离出来,然后将数字压入栈中,将运算符也压入栈中。当遇到右括号时,我们将栈顶的两个数字弹出,并根据栈顶的运算符进行计算,将计算结果压入栈中。重复这个过程,直到栈中只剩下一个数字,这个数字就是表达式的值。
Python 实现
def calculate(s):
"""
计算一个给定字符串表达式的值。
参数:
s: 一个字符串表达式。
返回:
表达式的值。
"""
# 将表达式中的数字和运算符分离出来。
tokens = []
i = 0
while i < len(s):
if s[i].isdigit():
# 如果是数字,则将它压入栈中。
number = 0
while i < len(s) and s[i].isdigit():
number = number * 10 + int(s[i])
i += 1
tokens.append(number)
elif s[i] in "+-*/":
# 如果是运算符,则将它压入栈中。
tokens.append(s[i])
i += 1
else:
# 如果是其他字符,则跳过它。
i += 1
# 创建一个栈来存储运算符和操作数。
stack = []
# 遍历令牌。
for token in tokens:
# 如果是数字,则将它压入栈中。
if isinstance(token, int):
stack.append(token)
# 如果是运算符,则将栈顶的两个数字弹出,并根据运算符进行计算,将计算结果压入栈中。
else:
num2 = stack.pop()
num1 = stack.pop()
if token == "+":
result = num1 + num2
elif token == "-":
result = num1 - num2
elif token == "*":
result = num1 * num2
else:
result = int(num1 / num2)
stack.append(result)
# 栈中只剩下一个数字,这个数字就是表达式的值。
return stack[0]
复杂度分析
- 时间复杂度:O(n),其中 n 是表达式中的字符数。
- 空间复杂度:O(n),其中 n 是表达式中的字符数。
结语
LeetCode 227 题是一个经典的基础计算器问题,它要求我们计算一个给定字符串表达式的值。这个问题可以用 Python 的栈数据结构来解决。这篇文章详细介绍了如何使用 Python 来解决 LeetCode 227 题,并提供了清晰易懂的代码示例。希望这篇文章对您有所帮助。