LeetCode227:基本计算器|| (栈、模拟)
解题思路:两个双端队列模拟,一个存放操作数 a,另一个存放操作符 op,如果找到另一个操作数b,判断操作队列队尾是否是*/,是的话执行 a(*or/)b。遍历完字符串,如果操作符队列非空,说明还有+-操作未执行,顺序遍历操作符队列。
1 class Solution:
2 def calculate(self, s):
3 stack = [] # 存储 a (op) b中的a
4 op = [] #存储操作
5 s= s+' '
6 val=0 # a (op) b中的b
7 flag= False
8 for i in range(len(s)-1):
9 if ord('0')<=ord(s[i])<=ord('9'):
10 val = val*10+ord(s[i])-ord('0')
11 flag = True
12 if not (ord('0')<=ord(s[i+1])<=ord('9')):
13 if len(op)>0:
14 if op[-1] == '*': #如果当前 b 识别结束,并且操作符栈有元素,判断是否是*/,是的话就执行*/操作
15 val = stack[-1]*val
16 _,_= stack.pop(),op.pop()
17 elif op[-1]=='/':
18 val = stack[-1]//val
19 _,_=stack.pop(),op.pop()
20 elif s[i] == '+' or s[i]=='-' or s[i]=='*' or s[i] == '/': #如果是操作符,把识别的a加入stack,s[i]加入操作栈
21 if flag:
22 stack.append(val)
23 val,flag = 0,0
24 op.append(s[i])
25
26 if flag: #如果flag为真,说明最后的b还没保存起来
27 stack.append(val)
28 ans =stack[0]
29 if len(op): #说明操作栈还有+-需要操作,按照从左到右顺序执行
30 for i in range(len(op)):
31 if op[i]=='+':
32 ans=ans+stack[i+1]
33 else:
34 ans = ans -stack[i+1]
35
36 return ans
37 s = Solution().calculate("2*2*3/3")
38 print(s)
LeetCode227:基本计算器|| (栈、模拟)的更多相关文章
- hdoj--1237--简单计算器(栈模拟)
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- hiho #1332 : 简单计算器 栈+递归
#1332 : 简单计算器 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 编写一个程序可以完成基本的带括号的四则运算.其中除法(/)是整除,并且在负数除法时向0取整.( ...
- HDU 1022 Train Problem I(栈模拟)
传送门 Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of st ...
- UVALive 3486/zoj 2615 Cells(栈模拟dfs)
这道题在LA是挂掉了,不过还好,zoj上也有这道题. 题意:好大一颗树,询问父子关系..考虑最坏的情况,30w层,2000w个点,询问100w次,貌似连dfs一遍都会TLE. 安心啦,这肯定是一道正常 ...
- UVALive 7454 Parentheses (栈+模拟)
Parentheses 题目链接: http://acm.hust.edu.cn/vjudge/contest/127401#problem/A Description http://7xjob4.c ...
- poj1363Rails(栈模拟)
主题链接: id=1363">啊哈哈,点我点我 思路: 这道题就是一道简单的栈模拟. .. .我最開始认为难处理是当出栈后top指针变化了. .当不满足条件时入栈的当前位置怎么办.这时 ...
- 【LintCode·容易】用栈模拟汉诺塔问题
用栈模拟汉诺塔问题 描述 在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子.要求盘子必须按照从小到大的顺序从上往下堆 (如:任意一个盘子,其必须堆在比它大的盘子上面).同时, ...
- 51Nod 1289 大鱼吃小鱼 栈模拟 思路
1289 大鱼吃小鱼 栈模拟 思路 题目链接 https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1289 思路: 用栈来模拟 ...
- Code POJ - 1780(栈模拟dfs)
题意: 就是数位哈密顿回路 解析: 是就算了...尼玛还不能直接用dfs,得手动开栈模拟dfs emm...看了老大半天才看的一知半解 #include <iostream> #inclu ...
- HDOJ 4699 Editor 栈 模拟
用两个栈模拟: Editor Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) ...
随机推荐
- 手把手教你搭建springbootsecurity+jwt,全面了解
研究了两周了springbootsecurity+jwt的使用,终于搭起来了,这里跟大家分享下. 首先,不了解jwt的可以提前去查下相关资料,我之前也有讲过,大家可以先看下: https://www ...
- 《Python魔法大冒险》 001 序章:少年小鱼的不平凡一天
在一个普通的城市里,生活着一个名叫小鱼的少年.他是一名初中生,但在班级里,他的学习成绩总是垫底.同学们经常取笑他,有时甚至戏称他为"倒数王". 放学后,小鱼一个人走在回家的路上,他 ...
- jenkins更换国内插件源
sed -i 's/https:\/\/updates.jenkins.io\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' ...
- c语言代码练习4
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include <string.h> int main() { /* ...
- WebKit Insie: Active 样式表
WebKit Inside: CSS 样式表的匹配时机介绍了当 HTML 页面有不同 CSS 样式表引入时,CSS 样式表开始匹配的时机.后续文章继续介绍 CSS 样式表的匹配过程,但是在匹配之前,首 ...
- 第五周单元测验题英语教学与互联网 mooc
第五周单元测验题 返回 本次得分为:16.00/20.00, 本次测试的提交时间为:2020-08-30, 如果你认为本次测试成绩不理想,你可以选择 再做一次 . 1 单选(2分) 从评价的主体来看, ...
- Util应用框架Web Api开发环境搭建
要使用Util应用框架开发项目,首先需要搭建合适的开发环境. 迈出第一步,对于很多.Net新人可能并不简单. 如果你对.Net环境并不熟悉,请尽量按照本文档进行操作. 操作系统 请安装 Windows ...
- 服务器常见问题排查(一)——cpu占用高、上下文频繁切换、频繁GC
一般而言cpu异常往往还是比较好定位的.原因包括业务逻辑问题(死循环).频繁gc以及上下文切换过多.而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来分析对应的堆栈情况. 使用js ...
- [Python] 利用python的第三方库xlrd和xlwt来处理excel数据
今天在处理excel表格的时候,有一个需要提取表格中部分数据的操作.如果人工操作的话,有将近几千行,这样重复操作劳民伤财. 所以python就派上用场了. 简单介绍一下我要处理的问题,在excel一列 ...
- Go 方法集合与选择receiver类型
Go 方法集合与选择receiver类型 目录 Go 方法集合与选择receiver类型 一.receiver 参数类型对 Go 方法的影响 二.选择 receiver 参数类型原则 2.1 选择 r ...

