zoukankan      html  css  js  c++  java
  • 227.基本计算器II

    class Solution:
    # 实现基本计算器使用栈的数据结构,首先找出来数字,保存下来。
    # 然后碰到运算符,+ , - 直接压入栈里边,
    # 碰到运算符 * 和 / 的情况下,说明前面已经有一个数值压入栈,并且 num 的值为运算符的后一个数字。
    # 计算 * / 运算结果,并将计算后的结果压入栈里边。
    def calculate(self, s: str) -> int:
    # 定义变量字符串长度。
    length = len(s)
    # 定义栈,sign 运算符,num 用来暂时存放数字。
    stack,sign,num = [],'+',0
    # 进行遍历。
    for index in range(length):
    # 找到数字,
    if '0' <= s[index] <= '9':
    # 数字是多位数的情况。
    num = num * 10 + int(s[index])
    # 如果当前是运算符,注意,如果碰到当前是运算符,算的是上一个运算符的情况。
    # 上一个运算符的第一个运算数在栈里边,第二个为num
    if s[index] in '+-*/' or index == length - 1:
    # 如果上一个运算符为 + - ,可以直接压入栈,
    # 也可以计算一下在压入栈,但这样需要先向栈里边压入0.
    if sign == '+':
    stack.append(num)
    elif sign == '-':
    stack.append(-num)
    # 乘法和除法运算符,一个运算数在栈里边,另一个为num。
    elif sign == '*':
    stack.append(stack.pop() * num)
    else:
    # 注意整除的时候,可能压入栈里边的运算数为负数,
    # 因此需要考虑到负数的情况。这样来算整除。
    stack.append(int(stack.pop() / num))
    num = 0
    sign = s[index]
    return sum(stack)

    A = Solution()
    print(A.calculate("14-3/2"))





  • 相关阅读:
    转盘抽奖活动代码
    信息滚动条
    gulp应用学习
    js实现语音播报功能
    如何安装使用sass
    纯CSS写三角形-border法
    css兼容性写法
    字体中英文对照
    浏览器内核判断
    个人课程总结
  • 原文地址:https://www.cnblogs.com/cong12586/p/14516568.html
Copyright © 2011-2022 走看看