leetcode_227. 基本计算器 II
【摘要】 目录
一、题目内容
二、解题思路
三、代码
一、题目内容
给你一个字符串表达式 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中除法在负数处理时的问题。
三、代码
-
class Solution:
-
def calculate(self, s: str) -> int:
-
stack = []
-
res = 0
-
flag = '+'
-
cur_num = 0
-
i = 0
-
while i < len(s):
-
if ord(s[i]) >= ord('0'):
-
cur_num = cur_num * 10 + ord(s[i]) - ord('0')
-
if (ord(s[i]) < ord('0') and s[i] != ' ') or i == len(s) - 1:
-
if flag == '+':
-
stack.append(cur_num)
-
elif flag == '-':
-
stack.append(-cur_num)
-
elif flag == '*':
-
stack.append(stack.pop() * cur_num)
-
elif flag == '/':
-
if stack[-1] % cur_num == 0:
-
stack.append(stack.pop() // cur_num)
-
else:
-
stack.append(stack.pop() // cur_num if stack[-1] >= 0 else stack.pop() // cur_num + 1)
-
flag = s[i]
-
cur_num = 0
-
i += 1
-
-
while len(stack) != 0:
-
res += stack.pop()
-
return res
-
-
-
-
-
if __name__ == '__main__':
-
ss = Solution()
-
# s = " 3+5 / 2 "
-
# s = "14-3/2"
-
s = "10000-1000/10+100*1"
-
ans = ss.calculate(s)
-
print(ans)
文章来源: nickhuang1996.blog.csdn.net,作者:悲恋花丶无心之人,版权归原作者所有,如需转载,请联系作者。
原文链接:nickhuang1996.blog.csdn.net/article/details/114653378
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)