leetcode_224. 基本计算器

举报
悲恋花丶无心之人 发表于 2021/03/11 02:08:05 2021/03/11
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 实现一个基本的计算器来计算一个简单的字符串表达式 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并与之前的计算结果相加更新计算结果;

三、代码


  
  1. class Solution:
  2. def calculate(self, s: str) -> int:
  3. stack = []
  4. res = 0
  5. flag = 1
  6. i = 0
  7. while i < len(s):
  8. if s[i] == '+':
  9. flag = 1
  10. elif s[i] == '-':
  11. flag = -1
  12. elif s[i] == '(':
  13. stack.append(res)
  14. res = 0
  15. stack.append(flag)
  16. flag = 1
  17. elif s[i] == ')':
  18. res = stack.pop() * res + stack.pop()
  19. elif s[i].isdigit():
  20. s_num = ord(s[i]) - ord('0')
  21. while i + 1 < len(s):
  22. if s[i + 1].isdigit():
  23. s_num = s_num * 10 + ord(s[i + 1]) - ord('0')
  24. i += 1
  25. else:
  26. break
  27. res = res + flag * s_num
  28. i += 1
  29. return res
  30. if __name__ == '__main__':
  31. ss = Solution()
  32. s = "(1+(4+5+2)-3)+(6+8)"
  33. # s = "2147483647"
  34. # s = "1 + 1"
  35. ans = ss.calculate(s)
  36. print(ans)

文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。

原文链接:nickhuang1996.blog.csdn.net/article/details/114629241

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。