返回
路飞教你刷力扣题:227. 基本计算器 II
前端
2023-11-09 10:33:10
路飞教你刷力扣题:227. 基本计算器 II
导读
今天,我们继续刷力扣题,这次的目标是第 227 题:基本计算器 II。这道题要求我们实现一个基本计算器,能够计算给定字符串表达式中的值。
题目
给你一个字符串表达式 s,请你实现一个基本计算器来计算并返回它的值。
整数除法仅保留整数部分。
示例 1:
输入:s = "3+2*2"
输出:7
示例 2:
输入:s = " 3/2 "
输出:1
示例 3:
输入:s = " 3+5 / 2 "
输出:5
提示:
- 1 <= s.length <= 3 * 10^5
- s 由整数、'+'、'-'、'*' 和 '/' 组成
- '+'、'-'、'*' 和 '/' 的优先级均相同
- s 中不会存在括号
解题思路
这道题的解题思路很简单,我们可以使用一个栈来存储计算结果和操作符。
具体步骤如下:
- 将字符串 s 中的数字和操作符分别保存到两个列表中。
- 遍历操作符列表,对于每个操作符,将栈顶的两个元素弹出,进行计算,然后将计算结果压入栈中。
- 重复步骤 2,直到操作符列表为空。
- 此时,栈中只剩下一个元素,即计算结果。
代码实现
def calculate(s):
nums, ops = [], []
num = 0
for ch in s:
if ch.isdigit():
num = num * 10 + int(ch)
elif ch in "+-*/":
nums.append(num)
ops.append(ch)
num = 0
nums.append(num)
while ops:
op = ops.pop()
b, a = nums.pop(), nums.pop()
if op == '+':
nums.append(a + b)
elif op == '-':
nums.append(a - b)
elif op == '*':
nums.append(a * b)
else:
nums.append(int(a / b))
return nums[0]
时间复杂度分析
该算法的时间复杂度为 O(n),其中 n 是字符串 s 的长度。
空间复杂度分析
该算法的空间复杂度为 O(n),其中 n 是字符串 s 的长度。
结语
这道题的难点在于理解题目要求和实现算法。通过这道题,我们学习了如何使用栈来计算表达式。
下一期,我们将继续刷力扣题,敬请期待!
附录
力扣题:227. 基本计算器 II
力扣链接