题解 | #牛牛计算器#
牛牛计算器
https://www.nowcoder.com/practice/192ac31d5e054abcaa10b72d9b01cace
- 题目考察的知识点 : 栈的使用
- 题目解答方法的文字分析:
- 使用栈来实现该计算器。对于每个括号内的表达式,可以使用递归的方法计算。具体来说,可以使用一个栈 nums 记录当前位置之前的所有数字,同时还需要使用一个栈 ops 记录上一个操作符。遍历字符串 s,对于每个字符 c,进行如下操作:
- 如果 c 是数字,则将其转化为整数并加入栈 nums 的栈顶元素。
- 如果 c 是左括号,则找到与之匹配的右括号,并对其进行递归计算。
- 如果 c 是操作符,则直接将其加入栈 ops 的栈顶元素。
- 如果 c 是空格或者已经到达字符串末尾,则说明当前数字和操作符的读取已经结束,根据上一个操作符进行相应的计算并将结果加入栈 nums 的栈顶元素。
- 最终将栈 nums 中所有数字依次弹出并累加得到结果。
- 本题解析所用的编程语言: Python
- 完整且正确的编程代码
# # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # # @param s string字符串 # @return int整型 # class Solution: def calculate(self, s: str) -> int: nums, ops = [], [] num, pre_op = 0, '+' i, n = 0, len(s) while i < n: c = s[i] if c.isdigit(): num = num * 10 + int(c) elif c == '(': j, cnt = i, 0 for i in range(i, n): if s[i] == '(': cnt += 1 if s[i] == ')': cnt -= 1 if cnt == 0: break num = self.calculate(s[j+1:i]) if not c.isspace() or i == n-1: if pre_op == '+': nums.append(num) elif pre_op == '-': nums.append(-num) elif pre_op == '*': nums[-1] *= num num = 0 pre_op = c i += 1 return sum(nums)
牛客高频top202题解系列 文章被收录于专栏
记录刷牛客高频202题的解法思路