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"))





  • 相关阅读:
    pandas学习
    Scala类详述
    1G-4G的介绍及eclipse中Android工程目录介绍
    Day01
    Linux系统BackSpace 、方向键的问题
    SEL数据类型,@selector的用法,以及调用SEL
    git本地仓库与github远程仓库链接协议问题
    Linux下包含头文件的路径问题与动态库链接路径问题
    c++中basic_istream::getline()的返回值何时为真
    c++标准库函数equal_range()
  • 原文地址:https://www.cnblogs.com/cong12586/p/14516568.html
Copyright © 2011-2022 走看看