解题思路

  1. 用两个栈分别存字符和数字。
  2. 顺序读入字符,处理方式分为字符和数字两种。
  3. 处理字符分为')'和非')'两种。
  4. 处理数字需要读取字符栈栈顶,分为'+'、'-'和非'+'、'-'。

代码

class Solution {
public:
stack <int> st;//数字栈
stack <char> cst;//符号栈 void solveNum(int n){
//如果碰到加减,将上一个数字取出来,做运算之后放入栈中
if(st.size() &&cst.size()){
char c = cst.top();
if(c == '+'){
cst.pop();
int t = st.top();
st.pop();
st.push(t+n);
}else if(c == '-'){
cst.pop();
int t = st.top();
st.pop();
st.push(t-n);
}else{
st.push(n);
}
} else{
st.push(n);
}
} //处理字符
void solveChar(char c){
//如果遇到')',弹出'('即可,并且处理顶部数字,应对类似1+(1+1)+2的情况
if(c != ')'){
cst.push(c);
}else{
cst.pop();
if(st.size()){
int t = st.top();
st.pop();
solveNum(t);
}
}
} int calculate(string s) {
//加上“()”是为了避免全字符的情况
s += "()";
int num = 0;
int flag = 0;
for(auto i:s){
if(i == ' ') continue;
if(i >= '0' && i <= '9') num = num*10+i-'0', flag = 1;
else{
//如果上一个字符是数字
if(flag == 1){
//处理数字
solveNum(num);
num = 0;
flag = 0;
}
//处理字符
solveChar(i);
}
}
return st.top();
}
};

LeetCode224. Basic Calculator (用栈计算表达式)的更多相关文章

  1. [LeetCode] Basic Calculator II 基本计算器之二

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  2. [LeetCode] 227. Basic Calculator II 基本计算器之二

    Implement a basic calculator to evaluate a simple expression string. The expression string contains ...

  3. LeetCode224——Basic Calculator

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

  4. 224. Basic Calculator + 227. Basic Calculator II

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

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

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

  6. Basic Calculator - Stack(表达式计算器)

    978. Basic Calculator https://www.lintcode.com/problem/basic-calculator/description public class Sol ...

  7. golang数据结构之利用栈求计算表达式(加减乘除)

    例如:3+2*6-2 先定义两个栈,一个为数值栈,一个为运算符栈: stack.go package stack import ( "errors" "fmt" ...

  8. [LeetCode] Basic Calculator 基本计算器

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

  9. 数据结构与算法(1)支线任务2——Basic Calculator

    题目:https://leetcode.com/problems/basic-calculator/ Implement a basic calculator to evaluate a simple ...

随机推荐

  1. swift 类型备份

    Swift语法3.03(类型Types) https://www.jianshu.com/p/839f9bc4b9a3 https://developer.apple.com/library/cont ...

  2. CSS text-transform 属性 控制控制文本的大小写

    值 描述 none 默认.定义带有小写字母和大写字母的标准的文本. capitalize 文本中的每个单词以大写字母开头. uppercase 定义仅有大写字母. lowercase 定义无大写字母, ...

  3. 【JS】【30】各种正则

    前言: 0,基本规则:有点枯燥,可以参考下 正则表达式 – 教程 | 菜鸟教程 http://www.runoob.com/regexp/regexp-tutorial.html 1,校验手机号 2, ...

  4. 【airtest】报错:requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(54, 'Connection reset by peer')),解决方法如下

    1. 环境及设备:mac, xcode , iphonex 2. 最近出现一个让人费解的问题,airtest 没跑多长时间,服务就断掉,而且总是报“requests.exceptions.Connec ...

  5. C语言基础 (11) 结构体 ,共用体 枚举 typedef

    1 课堂回顾 作用域与生命周期 2 static 局部变量 2 打字游戏 3 内存分区代码分析 4 结构体基本操作 (复合类型[自定义类型 #include <stdio.h> #incl ...

  6. 设置ssh会话过期时间

    客户端配置选项: 编辑配置文件 ~/.ssh/config 加入以下配置项,如不存在新建一个即可: Host * ServerAliveInterval 300 ServerAliveCountMax ...

  7. C#强化系列:HttpModule,HttpHandler,HttpHandlerFactory简单使用

    这三个对象我们在开发Asp.net程序时经常会用到,似乎很熟悉,但有时候又不太确定.本文通过一个简单的例子来直观的比较一下这三个对象的使用.HttpModule:Http模块,可以在页面处理前后.应用 ...

  8. [Linux]第五部分-Linux系统管理员

    启动流程如下:1.加载BIOS信息,读取第一个启动设备代号2.读取第一个启动设备的Mbr引导程序的启动信息3.加载操作系统核心信息4.核心执行init程序并获取运行信息5.init执行 /etc/rc ...

  9. leetcode_Isomorphic Strings _easy

    Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...

  10. 利用ajax异步处理POST表单中的数据

    //防止页面进行跳转 $(document).ready(function(){   $("#submit").click(function(){    var str_data= ...