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 ...
随机推荐
- CCF 202012-5星际旅行(20~100分)
前置知识 线段树:通过懒惰标记,可实现区间处理,和区间询问皆为\(O(logn)\)时间复杂度的数据结构,是一种二叉树.因此对于一个节点\(st\),其左儿子节点为\(st*2\),右节点为\(st* ...
- doris建表报错 errCode = 2, detailMessage = Scale of decimal must between 0 and 9. Scale was set to: 10
doris建表报错 问题背景 当我从Mpp库向doris库中导数据时,需要先创建对应的数据表,将Mpp库中表的建表语句略作修改后,在doris服务器上运行 CREATE TABLE opt_conne ...
- Web项目如何配置Eslint
介绍 ESLint 是一个根据方案识别并报告 ECMAScript/JavaScript 代码问题的工具,其目的是使代码风格更加一致并避免错误.在很多地方它都与 JSLint 和 JSHint 类似, ...
- Solution -「HDU 3507」Print Article
Description Link. 给出 \(N\) 个单词,每个单词有个非负权值 \(C_{i}\),现要将它们分成连续的若干段,每段的代价为此段单词的权值和,还要加一个常数 \(M\),即 \(( ...
- Note -「Polynomial」
Part. 1 FFT Part. 1-1 Main 对于一个 \(n\) 次多项式 \(F(x)=\sum_{i=0}^{n}a_{i}x^{i}\),在平面直角坐标系中可以由 \(n+1\) 个点 ...
- 使用ensp搭建路由拓扑,并使用isis协议实现网络互通实操
转载请注明出处: 1.通过拓扑搭建如下拓扑: 其中R7.R8为L1,R6为L1/2,R9为L2. 2.配置isis实现网络互通 R7配置如下: [Huawei]isis 1 [Huawei-isis- ...
- RK3588平台产测之ArmSoM-W3软硬件重启测试
1. 简介 专栏总目录 ArmSoM团队在产品量产之前都会对产品做几次专业化的功能测试以及性能压力测试,以此来保证产品的质量以及稳定性 优秀的产品都要进行多次全方位的功能测试以及性能压力测试才能够经得 ...
- CSP-J 2022 游记
10.9 早上睡到 7:00. 上午继续学习 Vim,学习哈希表. 10.11 白天线段树,区间加从六参改成四参就过了 晚上模拟赛,感觉良好 10.16 膜你赛,std变量命名毒瘤. 想用 geogb ...
- mysqli操作
1.使用mysqli_connect()函数,语法如下: mysqli 对象名=mysqli_connect(数据库服务名,用户名,密码,数据库名) 例:$conn=mysqli_connect('l ...
- 关于CAS等原子操作,说点别人没说的
Java中提供了原子操作,可以简单看一下AtomicInteger类中的一个典型的原子操作incrementAndGet(),表示对原子整数变量进行加操作,并返回新的值.实现如下: public cl ...

