题目描述:
实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。
示例 1:
输入:s = “1 + 1”
输出:2
示例 2:
输入:s = " 2-1 + 2 "
输出:3
示例 3:
输入:s = “(1+(4+5+2)-3)+(6+8)”
输出:23
提示:
1 <= s.length <= 3 * 105
s 由数字、’+’、’-’、’(’、’)’、和 ’ ’ 组成
s 表示一个有效的表达式
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/basic-calculator
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
通过代码:
class Solution:
def calculate(self, s: str) -> int:
s = s.replace(" ", "")
#print(s)
res = 0
stack = []
n = len(s)
i = 0
cur_num = ""
sign = 1
while i < n:
# print(sign)
if s[i] == '-':
sign = -1
i += 1
elif s[i] == '+':
sign = 1
i += 1
elif s[i] == '(':
stack.append(res)
stack.append(sign)
#print(stack)
res = 0
sign = 1
i += 1
elif s[i] == ')':
res = stack.pop(-1) * res + stack.pop(-1)
i += 1
else:
while i < n and '0' <= s[i] <= '9':
#print(s[i])
cur_num += s[i]
i += 1
res += ( sign * int(cur_num) )
cur_num = ""
return res
注意事项:
栈,每遇到 ‘(’ 将目前的 和res 与 符号sign(-1,1) 入栈,并将res置0、sign置1,当遇到 ‘)’ 时,说明一个括号内的和res计算完毕,将这个 和res 乘以栈中的 符号sign 并将之前的 和res 相加,循环内重复操作即可。(每计算一部分的和,就将结果和符号位压入栈,每遇到闭合括号,就做累加,保证最后是对的结果)
本文介绍了一个基本计算器的设计与实现,能够解析并计算简单的字符串表达式。文章详细解释了使用栈的数据结构来处理括号和运算符的过程,通过示例展示了算法的工作原理。
1622

被折叠的 条评论
为什么被折叠?



