leetcode_227. 基本计算器 II

举报
悲恋花丶无心之人 发表于 2021/03/12 00:07:44 2021/03/12
【摘要】 目录 一、题目内容 二、解题思路 三、代码 一、题目内容 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 示例 1: 输入:s = "3+2*2" 输出:7 示例 2: 输入:s = " 3/2 " 输出:1 示例 3: 输入:s = " 3+5 / 2 "...

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给你一个字符串表达式 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 表示一个 有效表达式
表达式中的所有整数都是非负整数,且在范围 [0, 2^31 - 1] 内
题目数据保证答案是一个 32-bit 整数

二、解题思路

leetcode_224. 基本计算器想法类似,用栈去存,只不过这次栈里只存两个数直接的计算结果,注意Python中除法在负数处理时的问题。

三、代码


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

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

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

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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