leetcode_227. 基本计算器 II

目录

一、题目内容

二、解题思路

三、代码


一、题目内容

给你一个字符串表达式 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)
悲恋花丶无心之人 CSDN认证博客专家 深度学习 神经网络 Pytorch
计算机视觉在读研究生,熟悉Pytorch,MXNet,TensorFlow,Keras等深度学习框架,主要涉及的领域有目标检测,语义分割,超分辨率重建,行人重识别等。
个人GitHub网址为:https://github.com/nickhuang1996
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页
实付 29.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值