【LeetCode】227. Basic Calculator II 解题报告(Python)

【LeetCode】227. Basic Calculator II 解题报告(Python)

标签(空格分隔): LeetCodepython

做者: 负雪明烛
id: fuxuemingzhu
我的博客: http://fuxuemingzhu.me/c++


题目地址:https://leetcode.com/problems/basic-calculator-ii/description/git

题目描述:

Implement a basic calculator to evaluate a simple expression string.算法

The expression string contains only non-negative integers, +, -, *, / operators and empty spaces . The integer division should truncate toward zero.express

Example 1:app

Input: "3+2*2"
Output: 7

Example 2:ide

Input: " 3/2 "
Output: 1

Example 3:ui

Input: " 3+5 / 2 "
Output: 5

Note:lua

  • You may assume that the given expression is always valid.
  • Do not use the eval built-in library function.

题目大意

给算数表达式求值。spa

解题方法

直接使用eval能够过。。而后算法的话,使用下下面的方法:

用num保存上一个数字,用pre_op保存上一个操做符。当遇到新的操做符的时候,须要根据pre_op进行操做。乘除的优先级高于加减。因此有如下规则:

以前的运算符是+,那么须要把以前的数字num进栈,而后等待下一个操做数的到来。
以前的运算符是-,那么须要把以前的数字求反-num进栈,而后等待下一个操做数的到来。
以前的运算符是×,那么须要马上出栈和以前的数字相乘,从新进栈,而后等待下一个操做数的到来。
以前的运算符是/,那么须要马上出栈和以前的数字相除,从新进栈,而后等待下一个操做数的到来。

注意比较的都是以前的操做符和操做数,如今遇到的操做符是没有什么用的。

另外,坑爹的Python地板除。。好比-3//2=2的,和c++不同。所以真正操做的时候若是遇到负数,使用的用浮点除再取整的方式得到和c++同样的结果。

class Solution:
    def calculate(self, s):
        """ :type s: str :rtype: int """
        stack = []
        pre_op = '+'
        num = 0
        for i, each in enumerate(s):
            if each.isdigit():
                num = 10 * num + int(each)
            if i == len(s) - 1 or each in '+-*/':
                if pre_op == '+':
                    stack.append(num)
                elif pre_op == '-':
                    stack.append(-num)
                elif pre_op == '*':
                    stack.append(stack.pop() * num)
                elif pre_op == '/':
                    top = stack.pop()
                    if top < 0:
                        stack.append(int(top / num))
                    else:
                        stack.append(top // num)
                pre_op = each
                num = 0
        return sum(stack)

日期

2018 年 6 月 27 日 ———— 阳光明媚,心情大好,抓紧科研啊

相关文章
相关标签/搜索