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)