题目描述:

方法一:中缀转后缀

  1. #!_*_coding:utf-8_*_
  2. class Solution:
  3. def calculate(self, s: str) -> int:
  4. def in_to_suffix(s):
  5. priority = {'+': 1, '-': 1, '*': 2, '/': 2}
  6. s.replace(" ", "")
  7. result = []
  8. stack = []
  9. for j,i in enumerate(s):
  10. if i in priority.keys():
  11. while stack and stack[-1] in priority.keys() and priority[i] <= priority[stack[-1]]:
  12. result.append(stack.pop())
  13. stack.append(i)
  14. else:
  15. if j!=0 and s[j-1].isdigit():
  16. i = int(result.pop())*10+int(i)
  17. result.append(i)
  18. while stack:
  19. result.append(stack.pop())
  20. print(result)
  21. return result
  22.  
  23. def evalRPN(tokens):
  24. f1 = lambda a, b: a + b
  25. f2 = lambda a, b: a - b
  26. f3 = lambda a, b: a * b
  27. f4 = lambda a, b: a // b
  28. maps = {'+': f1, '-': f2, '*': f3, '/': f4}
  29. stack = []
  30. for token in tokens:
  31. if token in maps:
  32. a = stack.pop()
  33. b = stack.pop()
  34. stack.append(maps[token](b, a))
  35. else:
  36. stack.append(int(token))
  37. return stack[-1]
  38.  
  39. s = s.replace(" ","")
  40. res = in_to_suffix(s)
  41. return evalRPN(res)

方法二:栈

  1. class Solution:
  2. def calculate(self, s: str) -> int:
  3. stack = []
  4. i = 0
  5. while i < len(s):
  6. if s[i].isdigit():
  7. tmp = 0
  8. while i < len(s) and s[i].isdigit():
  9. tmp = tmp * 10 + int(s[i])
  10. i += 1
  11. stack.append(tmp)
  12. # 如果栈中有乘除,先算出来
  13. while len(stack) > 1 and stack[-2] in {"*", "/"}:
  14. stack.pop()
  15. opt = stack.pop()
  16. if opt == "*":
  17. stack.append(stack.pop() * tmp)
  18. else:
  19. stack.append(stack.pop() // tmp)
  20. elif s[i] in { "*", "/", "+", "-"}:
  21. stack.append(s[i])
  22. i += 1
  23. else:
  24. i += 1
  25. res = 0
  26. sign = 1
  27. for t in stack:
  28. if t == "+":
  29. sign = 1
  30. elif t == "-":
  31. sign = -1
  32. else:
  33. res += sign * t
  34. return res

leetcode-227-基本计算器②的更多相关文章

  1. LeetCode 227. 基本计算器 II(Basic Calculator II)

    227. 基本计算器 II 227. Basic Calculator II 题目描述 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+,-,*,/ 四种运算符和 ...

  2. Java实现 LeetCode 227 基本计算器 II(二)

    227. 基本计算器 II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格 . 整数除法仅保留整数部分. 示例 1: 输入: ...

  3. Leetcode 227.基本计算器II

    基本计算器II 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  . 整数除法仅保留整数部分. 示例 1: 输入: " ...

  4. [LeetCode] 227. 基本计算器 II

    题目链接: https://leetcode-cn.com/problems/basic-calculator-ii 难度:中等 通过率:33.2% 题目描述: 实现一个基本的计算器来计算一个简单的字 ...

  5. Leetcode 224/227/772 计算器

    题目描述 Leetcode 224 Leetcode 224: 这里想让我们实现一个基础的计算器,来计算给定的字符串. 给定的字符串中包含 ( ) + - 和非负整数和空格. # Example 1: ...

  6. [LeetCode] 227. Basic Calculator II 基本计算器 II

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  7. [LeetCode] 227. Basic Calculator II 基本计算器之二

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  8. LeetCode#227.Basic Calculator II

    题目 Implement a basic calculator to evaluate a simple expression string. The expression string contai ...

  9. Leetcode 224.基本计算器

    基本计算器 实现一个基本的计算器来计算一个简单的字符串表达式的值. 字符串表达式可以包含左括号 ( ,右括号 ),加号 + ,减号 -,非负整数和空格  . 示例 1: 输入: "1 + 1 ...

  10. 【LeetCode】基本计算器II

    [问题]实现一个基本的计算器来计算一个简单的字符串表达式的值.字符串表达式仅包含非负整数,+, - ,*,/ 四种运算符和空格  .整数除法仅保留整数部分. 输入: "3+2*2" ...

随机推荐

  1. JAVA集合--Iterator接口

        本文首发于cartoon的博客     转载请注明出处:https://cartoonyu.github.io/cartoon-blog     上一篇文章中我在集合元素的遍历中已经有涉及到I ...

  2. [BOI2009]Radio Transmission 无线传输

    题目描述 给你一个字符串,它是由某个字符串不断自我连接形成的. 但是这个字符串是不确定的,现在只想知道它的最短长度是多少. 输入输出格式 输入格式: 第一行给出字符串的长度,1 < L ≤ 1, ...

  3. 笔记-Linux包管理命令

    一.apt, apt-get, dpkg命令 apt-get是一条linux命令,适用于deb包管理式的操作系统,主要用于自动从互联网的软件仓库中搜索.安装.升级.卸载软件或操作系统.使用apt-ge ...

  4. JS Window对象 计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码。

    计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互 ...

  5. 读书笔记---《Docker 技术入门与实践》---其一

    一.镜像1.1.搜索 搜索所有nginx镜像 $ docker search nginx NAME DESCRIPTION STARS OFFICIAL AUTOMATED nginx Officia ...

  6. Cacti 发送警告邮件

    Cacti版本: 0.8.8a 目的:监听CPU 高于1个设定值时发送警告邮件(范例这一台主机有1颗实体CPU,总共2核心) 需要安装的插件: 1.1. thold Threshold,下载使用的是v ...

  7. Shell中整数自增的几种方式

    Shell中整数自增的几种方式 2016年08月27日 19:07:40 杰瑞26 阅读数:2816    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...

  8. mac系统下通过安装包的形式安装mongdb

    下载地址 mongoDB mongoDB 图形化管理软件 MongoDB Compass 下载完成后,进行解压,解压后的文件进行重命名 mongodb 然后前往/usr/local,将mongodb文 ...

  9. NX二次开发-UFUN查询体的类型为实体还是片体UF_MODL_ask_body_type

    NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...

  10. HDU3342:判断有向图中是否存在3元环-Tarjan或拓扑排序

    题目大意: 给你一个关系图,判断是否合法.每个人都有师父和徒弟,可以有很多个: 若A是B的师父,B是C的师父,则A也算C的师父. 不合法:  1) . 互为师徒:(有回路)  2) .你的师父是你徒弟 ...