224、Basic Calculator
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2
" 2-1 + 2 " = 3
"(1+(4+5+2)-3)+(6+8)" = 23
Note: Do not use the eval built-in library function.
这个题目的思路要考虑的情况比较多,主要的想法是:符号相当于数字之前的正负号;默认在第一个数字之前加了正号。
有一个基准result为0,可能有5种情况:
/*
1、如果是数字,就转换为十进制;考虑123+122等(isdigit函数);
2、如果是+号,用result去和上一个符号(sign)和数字(number)运算,然后将number清空,符号'+'保存;
3、'-'同上;
4、如果是'('那么利用一个栈,将之前的结果result保存,将'('前的符号sign保存;然后将result和sign初始化(类似于重新开始计算);
5、如果是')'那么这个括号中的result要和之前保存的result(stack)还有sign(stack)进行计算。
*/
1 int calculate(string s) {
2 long int result=0;
3 stack<long int> s1;
4 int sign=1,i=0;
5 int number=0;
6 // 2+1+(4+5+2)-3+7
7 while(i<s.size())
8 {
9 //123
10 if(isdigit(s[i]))
11 {
12 number=number*10+(s[i]-'0');
13 }
14 else if(s[i]=='+')
15 {
16 result+=sign*number;
17 sign=1;
18 number=0;
19 }
20 else if(s[i]=='-')
21 {
22 result+=sign*number;
23 sign=-1;
24 number=0;
25 }
26 else if(s[i]=='(')
27 {
28 s1.push(result);
29 s1.push(sign);
30 result=0;
31 sign=1;
32 }
33 //符号是括号中result前的正负号。
34 else if(s[i]==')')
35 {
36 result+=sign*number;
37 //非常重要
38 number=0;//否则括号前一个数字要被计算两次。
39 long temp=s1.top();
40 s1.pop();
41 result*=temp;
42 result+=s1.top();
43 s1.pop();
44 }
45 i++;
46 }
47 result+=sign*number;//每次遇到下一个符号即数字后一个符号,才去算上一个数字及其前面的正负号。
48 return result;
49 }
50 };
224、Basic Calculator的更多相关文章
- LeetCode(224) Basic Calculator
题目 Implement a basic calculator to evaluate a simple expression string. The expression string may co ...
- Basic Calculator 基本计算器
2018-09-27 22:02:36 一.Basic Calculator II 问题描述: 问题求解: sign用来保存前一个符号,用num来记录数字,如果碰到一个符号或者到达结尾,则需要进行入栈 ...
- leetcode 224. Basic Calculator 、227. Basic Calculator II
这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ...
- 【LeetCode】224. Basic Calculator
Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ...
- 224. Basic Calculator + 227. Basic Calculator II
▶ 两个四则表达式运算的题目,第 770 题 Basic Calculator IV 带符号计算不会做 Orz,第 772 题 Basic Calculator III 要收费 Orz. ▶ 自己的全 ...
- Java for LeetCode 224 Basic Calculator
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- (medium)LeetCode 224.Basic Calculator
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
- 224. Basic Calculator
题目: Implement a basic calculator to evaluate a simple expression string. The expression string may c ...
- [leetcode]224. Basic Calculator
Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...
随机推荐
- 多测师讲解seleniun_ ACTIONCHAUNS定位_高级讲师肖sir
1.传统方法定位 2.模拟鼠标定位
- IDEA SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统
先放上github地址:spike-system,可以直接下载完整项目运行测试 SpringBoot+JPA+MySql+Redis+RabbitMQ 秒杀系统 技术栈:SpringBoot, MyS ...
- C++冷知识(1)
func()等价于func(void) 也就是说在C++中,参数列表为空意味着不接受任何参数.之所以要注意这一点是因为在C语言中,参数列表为空意味着参数不确定.两者的语义是有巨大差别的,作为学了C再学 ...
- selenium环境配置学习笔记
一 为什么进行自动化测试 缩短测试周期 避免人为出错 测试信息存储 轻易获取覆盖率 二 web/ui自动化条件和适用范围 手工测试已经完成,后期在不影响进度的前提下逐渐实现自动化 项目周期长,重复性工 ...
- Springboot配置excludePathPatterns不生效
Springboot添加拦截器配置excludePathPatterns不生效 code: @Configurationpublic class ServiceConfig implements We ...
- 可变数据类型不能作为python函数的参数
可变数据类型:列表.字典 不可变数据类型:整型.浮点型.字符串.元组 为什么可变数据类型不能作为python函数的参数?请看以下例子: def foo(a=[]): a.append(1) retur ...
- spring boot:接收数组参数及多文件混合json参数(spring boot 2.3.4)
一,生产环境中的复杂参数上传的场景 1,保存排序值 : 例如:某一件商品的多张展示图片排序,提交的排序值要和图片的id相对应 2,上传多张图片,图片要和指定的变量相对应 例如:在添加商品sku时, 需 ...
- ansible用get_url模块在受控机下载文件(ansible2.9.5)
一,ansible的get_url模块用途: get_url模块可以在受控机下载文件 可以理解成从受控端执行wget 下载的url支持:http | https | ftp 三种协议 说明:刘宏缔 ...
- dilated conv、deconv、fractional-strided conv
deconv的其中一个用途是做upsampling,即增大图像尺寸. dilated convolution: dilated conv,中文可以叫做空洞卷积或者扩张卷积. 首先是诞生背景,在图像分割 ...
- 4G DTU模块带有MQTT协议吗?
DTU作为一种通讯设备,其应用场合十分广泛.从广义上讲,在进行通信时,传输数据链路两端负责发送数据信息的模块单元都称之为DTU,在它的作用下对所传信息格式转换和数据整理校验.在狭义上的定义,DTU一般 ...