解题思路:

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:基本计算器(栈)的更多相关文章

  1. hiho #1332 : 简单计算器 栈+递归

    #1332 : 简单计算器 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 编写一个程序可以完成基本的带括号的四则运算.其中除法(/)是整除,并且在负数除法时向0取整.( ...

  2. F - 简单计算器(栈)

    F - 简单计算器 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Descripti ...

  3. HDU-1237- 简单计算器--栈的基本应用

    简单计算器 Problem Description 读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值.   Input 测试输入包含若干测试用例,每个测试用例占一行,每行不 ...

  4. HDU 1237 简单计算器 栈

    额,题目是中文的,题意就不用说了= =都看懂喽.写个字符串先把这行计算式存进去,不过不能存一个算一个,因为考虑到乘除法比加减法优先的原则,如果是加号减号就先存着等待计算,如果是乘号除号就直接算出来值就 ...

  5. [Swift]LeetCode224. 基本计算器 | Basic Calculator

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  6. hdoj--1237--简单计算器(栈模拟)

    简单计算器 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  7. HDU1237 简单计算器 栈

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1237 题目大意:读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值. 题目分 ...

  8. hdu-1237简单计算器(栈的运用)

    http://acm.hdu.edu.cn/showproblem.php?pid=1237 简单的栈的运用. 首先将数字和运算符分离,分别保存在两个数组中,然后按原来的式子的顺序,首先将第一个数和第 ...

  9. LeetCode224 基本计算器

    idea:刚开始是打算分类讨论,建立了数字栈和字符栈,按照传入字符当时两个栈的基本情况分类,结果讨论完之后分类太麻烦,导致分析完了之后漏洞不少.我觉得这道题难点在于括号和负号的处理,一开始将导致计算机 ...

  10. HDU题解索引

    HDU 1000 A + B Problem  I/O HDU 1001 Sum Problem  数学 HDU 1002 A + B Problem II  高精度加法 HDU 1003 Maxsu ...

随机推荐

  1. LeetCode46全排列(回溯入门)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 题目描述 难度:中等 给定一个不含重复数字的数组 nu ...

  2. Python+Flask接口实现简单的ToKen功能

    话不多说,上代码 from flask import request, jsonify from functools import wraps class TokenRequired: @classm ...

  3. 纯分享:将MySql的建表DDL转为PostgreSql的DDL

    背景 现在信创是搞得如火如荼,在这个浪潮下,数据库也是从之前熟悉的Mysql换到了某国产数据库. 该数据库我倒是想吐槽吐槽,它是基于Postgre 9.x的基础上改的,至于改了啥,我也没去详细了解,当 ...

  4. Confluence的Excel插件Elements Spreadsheet安装

    背景 Confluence是现在广泛使用的团队协作文档系统.虽然自身带了一些表格编辑功能,但表格的整体功能较弱,比如不能通过Excel文件进行导入导出,表格在复制到Excel时格式会比较奇怪等等.对于 ...

  5. Kafka Stream 流和状态

    4.2将状态操作应用到Kafka Stream 在上图的拓扑中生成了一个购买-交易事件流,拓扑中的一个处理节点根据销售额来计算客户的奖励级分.但在这个处理其中,要做的也仅仅时计算单笔交易的总积分,并转 ...

  6. 如何实现一个数据库的 UDF?图数据库 NebulaGraph UDF 功能背后的设计与思考

    大家好,我是来自 BOSS直聘的赵俊南,主要负责安全方面的图存储相关工作.作为一个从 v1.x 用到 v3.x 版本的忠实用户,在见证 NebulaGraph 发展的同时,也和它一起成长. BOSS直 ...

  7. Springboot简单功能示例-2 KEY初始化功能和全局错误处理

    springboot-sample 介绍 springboot简单示例 跳转到发行版 查看发行版说明 软件架构(当前发行版使用) springboot hutool-all 非常好的常用java工具库 ...

  8. 五分钟k8s入门到实战-应用配置

    背景 在前面三节中已经讲到如何将我们的应用部署到 k8s 集群并提供对外访问的能力,x现在可以满足基本的应用开发需求了. 现在我们需要更进一步,使用 k8s 提供的一些其他对象来标准化我的应用开发. ...

  9. ChatGPT — Release Notes

    ChatGPT - Release Notes The latest update for ChatGPT Written by Natalie. Updated yesterday Release ...

  10. ssr服务器极致渲染

    域名 RDS 云服务器 ECS 中国站   文档购物车ICP备案控制台   金秋上云季     首页 技术与产品   社区   直播   开发者学堂   开发者云   工具与资源中心   天池大赛 飞 ...