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的更多相关文章

  1. LeetCode(224) Basic Calculator

    题目 Implement a basic calculator to evaluate a simple expression string. The expression string may co ...

  2. Basic Calculator 基本计算器

    2018-09-27 22:02:36 一.Basic Calculator II 问题描述: 问题求解: sign用来保存前一个符号,用num来记录数字,如果碰到一个符号或者到达结尾,则需要进行入栈 ...

  3. leetcode 224. Basic Calculator 、227. Basic Calculator II

    这种题都要设置一个符号位的变量 224. Basic Calculator 设置数值和符号两个变量,遇到左括号将数值和符号加进栈中 class Solution { public: int calcu ...

  4. 【LeetCode】224. Basic Calculator

    Basic Calculator Implement a basic calculator to evaluate a simple expression string. The expression ...

  5. 224. Basic Calculator + 227. Basic Calculator II

    ▶ 两个四则表达式运算的题目,第 770 题 Basic Calculator IV 带符号计算不会做 Orz,第 772 题 Basic Calculator III 要收费 Orz. ▶ 自己的全 ...

  6. Java for LeetCode 224 Basic Calculator

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

  7. (medium)LeetCode 224.Basic Calculator

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

  8. 224. Basic Calculator

    题目: Implement a basic calculator to evaluate a simple expression string. The expression string may c ...

  9. [leetcode]224. Basic Calculator

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

随机推荐

  1. Java 集合看这一篇就够了

    大家好,这里是<齐姐聊数据结构>系列之大集合. 话不多说,直接上图: Java 集合,也称作容器,主要是由两大接口 (Interface) 派生出来的: Collection 和 Map ...

  2. 通过MapReduce降低服务响应时间

    在微服务中开发中,api网关扮演对外提供restful api的角色,而api的数据往往会依赖其他服务,复杂的api更是会依赖多个甚至数十个服务.虽然单个被依赖服务的耗时一般都比较低,但如果多个服务串 ...

  3. boost之asio

    asio asio是C++的准标准网络库,并且C++20标准库的网络部分将基于ASIO,需引入头文件#include <boost/asio.hpp>. ip地址 boost定义了表示ip ...

  4. 【C语言】这种求结构体成员大小的方法,你可能需要了解一下~

    在C语言编程中,有时候需要知道某结构体中某成员的大小,比如使用堆内存来存储结构体中的某成员时,需要知道该成员的大小,才好确定所需申请的空间大小.求某结构体中某成员的大小,你会怎么做? 例子: type ...

  5. Windows 上的苹果 mac Time Machine 时间机器免费替代品 FreeFileSync 操作指南

    Windows 上的苹果 mac Time Machine 时间机器免费替代品 FreeFileSync 操作指南 前言:为什么不用 Windows 10 自带的备份还原呢?因为不稳定,不能很好的备份 ...

  6. go 继承

    package main import "fmt" type Animal struct { Color string } // 继承动物结构体 type Dog struct { ...

  7. 第三章 TCP/IP 模型

    一.产生背景 1.伴随着计算机网络的飞跃发展,各大厂商根据自己的协议生产出了不同的硬件和软件 2.为了实现网络设备间的互相通讯,ISO和IEEE相继提出了OSI参考模型及其TCP/IP模型 二.TCP ...

  8. python 实现多层列表拆分成单层列表

    有个多层列表:[1, 2, 3, 4, [5, 6, [7, 8]], ['a', 'b', [2, 4]]],拆分成单层列表 使用内置方法 结果和原列表顺序不同 def split(li): pop ...

  9. 开源 Open Source

    FREE 开源不等于免费 代表自由 开源 Open Source软件和源代码提供给所有人,自由分发软件和源代码能够修改和创建衍生作品软件分类:商业   收费使用  代码不公开共享  免费用 代码不公开 ...

  10. VS 2019 远程调试

    一.简介 今天遇到一个问题,本地调试无任何问题,但是发布后代码服务器端响应总是不对.所以想调试下.故搞个远程调试.现在先配置下工具.步骤如下. 二.步骤 2.1.远程访问工具下载 地址:https:/ ...