leetcode_224. 基本计算器
【摘要】 目录
一、题目内容
二、解题思路
三、代码
一、题目内容
实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。
示例 1:
输入:s = "1 + 1" 输出:2
示例 2:
输入:s = " 2-1 + 2 " 输出:3
示例 3:
输入:s = "(1+(4+5+2)-3)+(6+8)" 输出:23...
目录
一、题目内容
实现一个基本的计算器来计算一个简单的字符串表达式 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 * 10^5
s 由数字、'+'、'-'、'('、')'、和 ' ' 组成
s 表示一个有效的表达式
二、解题思路
用栈来做,当遇到左括号时,存入之前的计算结果,再存入一个flag为1;
如果遇到右括号,则出栈flag为1并乘以当前括号内的计算结果,然后再加上出栈的之前的计算结果;
遇到数字,就计算与之后数字的构成的二位数,否则乘以 flag并与之前的计算结果相加更新计算结果;
三、代码
-
class Solution:
-
def calculate(self, s: str) -> int:
-
stack = []
-
res = 0
-
flag = 1
-
i = 0
-
while i < len(s):
-
if s[i] == '+':
-
flag = 1
-
elif s[i] == '-':
-
flag = -1
-
elif s[i] == '(':
-
stack.append(res)
-
res = 0
-
stack.append(flag)
-
flag = 1
-
elif s[i] == ')':
-
res = stack.pop() * res + stack.pop()
-
elif s[i].isdigit():
-
s_num = ord(s[i]) - ord('0')
-
while i + 1 < len(s):
-
if s[i + 1].isdigit():
-
s_num = s_num * 10 + ord(s[i + 1]) - ord('0')
-
i += 1
-
else:
-
break
-
-
res = res + flag * s_num
-
i += 1
-
-
return res
-
-
-
if __name__ == '__main__':
-
ss = Solution()
-
s = "(1+(4+5+2)-3)+(6+8)"
-
# s = "2147483647"
-
# s = "1 + 1"
-
ans = ss.calculate(s)
-
print(ans)
文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。
原文链接:nickhuang1996.blog.csdn.net/article/details/114629241
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)