解题思路

  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. 转载:关于 python ImportError: No module named 的问题

    关于 python ImportError: No module named 的问题 今天在 centos 下安装 python setup.py install 时报错:ImportError: N ...

  2. Ubuntu安装配置Python.pyDev

    一:安装ECLipse Eclipse官网下载软件tar包: 使用解压命令: sudo tar xzvf xxxxx.tar.gz -c /opt/ 创建快捷方式到桌面. 二:安装python-Num ...

  3. 给 iOS 开发者的 RxSwift(一)

    RxSwift 或许我们都听说过,但或许只知道 RxSwift 这个单词,长篇大论关于 RxSwift 的介绍往往使读者迷失在各种概念当中,却不知如何让它大展伸手.或许我们可以换一种姿势,一些应用场景 ...

  4. Zbrush 4R7中的镜像功能是怎么使用的?

    ZBrush一款3D图形绘制软件,功能十分强大,在雕刻建模的时候镜像工具是我们经常要用到的,它可以方便快捷雕刻对称的模型,那么ZBrush®中怎样镜像呢,本文小编将做详细介绍. ZBrush 3D镜像 ...

  5. node——模块化

    之前写的新闻部分几乎所有操作都写在了一起,这次开始进行模块化. 为什么要模块化: 1.提高开发效率,所有操作在一个文件内,不方便团队操作,模块化可多人同时操作 2.当程序出错,可以分模块寻找错误 3. ...

  6. [luogu2272 ZJOI2007] 最大半连通子图 (tarjan缩点 拓扑排序 dp)

    传送门 题目描述 一个有向图G=(V,E)称为半连通的(Semi-Connected),如果满足:?u,v∈V,满足u→v或v→u,即对于图中任意两点u,v,存在一条u到v的有向路径或者从v到u的有向 ...

  7. 【LibreOJ 6277】数列分块入门 1 (分块)

    emmm-学下分块~ 区间:数列中连续一段的元素 区间操作:将某个区间[a,b]的所有元素进行某种改动的操作 块:我们将数列划分成若干个不相交的区间,每个区间称为一个块 整块:在一个区间操作时,完整包 ...

  8. ftp服务器在linux中安装

    1.安装 执行 yum -y install vsftpd 2.检验是否安装vsftpd : rmp -qa | grep vsftpd      默认配置文件/ect/vsftpd/vsftpd.c ...

  9. ZOJ 3891 K-hash

    K-hash Time Limit: 2000ms Memory Limit: 131072KB This problem will be judged on ZJU. Original ID: 38 ...

  10. HDU2188 选拔志愿者

    /* HDU2188 选拔志愿者 http://acm.hdu.edu.cn/showproblem.php?pid=2188 博弈论 巴什博奕 巴什博奕要注意n<=m时是必胜态 * * * * ...