LeetCode-227 基本计算器 II

# 实现一个基本的计算器来计算一个简单的字符串表达式的值。
# 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  。 整数除法仅保留整数部分。
#
# 示例 1:
# 输入: "3+2*2"
# 输出: 7
#
# 示例 2:
# 输入: " 3/2 "
# 输出: 1
#
# 示例 3:
# 输入: " 3+5 / 2 "
# 输出: 5
#
# 说明:
# 你可以假设所给定的表达式都是有效的。
# 请不要使用内置的库函数 eval。

# python中的strip()可以去除头尾指定字符
# 想要去除中间字符,可以使用replace()函数


class Solution:
    def calculate(self, s: str) -> int:
        s = s.replace(' ', '')
        lens = len(s)
        test_stack = []
        index1 = 0
        index2 = 0
        while index2 != lens:
            if s[index2] == '+' or s[index2] == '-' or s[index2] == '*' or s[index2] == '/':
                test_stack.append(int(s[index1:index2]))
                test_stack.append(s[index2])
                index2 += 1
                index1 = index2
            else:
                index2 += 1
        test_stack.append(int(s[index1:index2]))
        # 遍历完成
        # 换栈
        test_stack2 = []
        lens2 = len(test_stack)
        for j in range(lens2):
            test_stack2.append(test_stack.pop())
        while test_stack2 != []:
            key = test_stack2.pop()
            if key != '*' and key != '/':
                test_stack.append(key)
            elif key == '*':
                pre = test_stack.pop()
                test_stack.append(pre * test_stack2.pop())
            elif key == '/':
                pre = test_stack.pop()
                test_stack.append(pre // test_stack2.pop())
        lens3 = len(test_stack)
        for f in range(lens3):
            test_stack2.append(test_stack.pop())
        result = test_stack2.pop()
        while test_stack2 != []:
            key = test_stack2.pop()
            if key == '+':
                result += test_stack2.pop()
            elif key == '-':
                result -= test_stack2.pop()
        return result

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值