LeetCode224:基本计算器(栈)
解题思路:
1、双栈模拟,一个用来存数,一个用来存操作符。需要考虑 '('后面紧跟'+'、'-'这种情况
2、递归:遇到左括号开始递归,遇到右括号结束递归,返回值。
1 class Solution:
2 def calculate(self, s):
3 s = '('+s+')'
4 stack = []
5 op = []
6 val = 0
7 flag = False
8 for i in range(len(s)):
9 if ord('0')<=ord(s[i])<=ord('9'):
10 val=val*10+ord(s[i])-ord('0')
11 flag= True
12 elif s[i]=='(':
13 op.append('(')
14 stack.append('(')
15 elif s[i]==')':
16 if flag:
17 stack.append(val)
18 flag = False
19 val = 0
20 ans = 0
21 while op[-1]!='(' and stack[-1]!='(':
22 if op[-1]=='+':
23 ans = ans + stack[-1]
24 elif op[-1]=='-':
25 ans = ans - stack[-1]
26 _,_= stack.pop(),op.pop()
27
28 if op[-1]=='(' and stack[-1]=='(':
29 _ = op.pop(),stack.pop()
30 elif op[-1]=='(':
31 ans+=stack[-1]
32 _ = stack.pop()
33 _ = op.pop(), stack.pop()
34 else:
35 print('error')
36 exit()
37 stack.append(ans)
38 elif s[i]=='+':
39 if flag:
40 stack.append(val)
41 flag=False
42 val = 0
43 op.append('+')
44 elif s[i]=='-':
45 if flag:
46 stack.append(val)
47 flag =False
48 val=0
49 op.append('-')
50 elif s[i]==' ':
51 continue
52 return stack[-1]
53 s = Solution().calculate("0+0+(-0+0)")
54 print(s)
LeetCode224:基本计算器(栈)的更多相关文章
- hiho #1332 : 简单计算器 栈+递归
#1332 : 简单计算器 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 编写一个程序可以完成基本的带括号的四则运算.其中除法(/)是整除,并且在负数除法时向0取整.( ...
- F - 简单计算器(栈)
F - 简单计算器 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descripti ...
- HDU-1237- 简单计算器--栈的基本应用
简单计算器 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. Input 测试输入包含若干测试用例,每个测试用例占一行,每行不 ...
- HDU 1237 简单计算器 栈
额,题目是中文的,题意就不用说了= =都看懂喽.写个字符串先把这行计算式存进去,不过不能存一个算一个,因为考虑到乘除法比加减法优先的原则,如果是加号减号就先存着等待计算,如果是乘号除号就直接算出来值就 ...
- [Swift]LeetCode224. 基本计算器 | Basic Calculator
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- hdoj--1237--简单计算器(栈模拟)
简单计算器 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- HDU1237 简单计算器 栈
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 题目大意:读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 题目分 ...
- hdu-1237简单计算器(栈的运用)
http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单的栈的运用. 首先将数字和运算符分离,分别保存在两个数组中,然后按原来的式子的顺序,首先将第一个数和第 ...
- LeetCode224 基本计算器
idea:刚开始是打算分类讨论,建立了数字栈和字符栈,按照传入字符当时两个栈的基本情况分类,结果讨论完之后分类太麻烦,导致分析完了之后漏洞不少.我觉得这道题难点在于括号和负号的处理,一开始将导致计算机 ...
- HDU题解索引
HDU 1000 A + B Problem I/O HDU 1001 Sum Problem 数学 HDU 1002 A + B Problem II 高精度加法 HDU 1003 Maxsu ...
随机推荐
- LeetCode46全排列(回溯入门)
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 题目描述 难度:中等 给定一个不含重复数字的数组 nu ...
- Python+Flask接口实现简单的ToKen功能
话不多说,上代码 from flask import request, jsonify from functools import wraps class TokenRequired: @classm ...
- 纯分享:将MySql的建表DDL转为PostgreSql的DDL
背景 现在信创是搞得如火如荼,在这个浪潮下,数据库也是从之前熟悉的Mysql换到了某国产数据库. 该数据库我倒是想吐槽吐槽,它是基于Postgre 9.x的基础上改的,至于改了啥,我也没去详细了解,当 ...
- Confluence的Excel插件Elements Spreadsheet安装
背景 Confluence是现在广泛使用的团队协作文档系统.虽然自身带了一些表格编辑功能,但表格的整体功能较弱,比如不能通过Excel文件进行导入导出,表格在复制到Excel时格式会比较奇怪等等.对于 ...
- Kafka Stream 流和状态
4.2将状态操作应用到Kafka Stream 在上图的拓扑中生成了一个购买-交易事件流,拓扑中的一个处理节点根据销售额来计算客户的奖励级分.但在这个处理其中,要做的也仅仅时计算单笔交易的总积分,并转 ...
- 如何实现一个数据库的 UDF?图数据库 NebulaGraph UDF 功能背后的设计与思考
大家好,我是来自 BOSS直聘的赵俊南,主要负责安全方面的图存储相关工作.作为一个从 v1.x 用到 v3.x 版本的忠实用户,在见证 NebulaGraph 发展的同时,也和它一起成长. BOSS直 ...
- Springboot简单功能示例-2 KEY初始化功能和全局错误处理
springboot-sample 介绍 springboot简单示例 跳转到发行版 查看发行版说明 软件架构(当前发行版使用) springboot hutool-all 非常好的常用java工具库 ...
- 五分钟k8s入门到实战-应用配置
背景 在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了. 现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发. ...
- ChatGPT — Release Notes
ChatGPT - Release Notes The latest update for ChatGPT Written by Natalie. Updated yesterday Release ...
- ssr服务器极致渲染
域名 RDS 云服务器 ECS 中国站 文档购物车ICP备案控制台 金秋上云季 首页 技术与产品 社区 直播 开发者学堂 开发者云 工具与资源中心 天池大赛 飞 ...

