解题思路

  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. 几个方便编程的C++特性

    前言: C++11的自动化特性给编程提供了不少方便,同时也给调试增加了很多负担,至于取舍看程序员的风格和侧重而定. auto:自动类型推断 在C++11之前,auto关键字用来指定存储期.在新标准中, ...

  2. 文字纵向滚动marquee

    <div style="width:200px; height:300px"><marquee direction="up" truespee ...

  3. 面试官:为什么mysql不建议执行超过3表以上的多表关联查询?

    概述 前段时间在跟其他公司DBA交流时谈到了mysql跟PG之间在多表关联查询上的一些区别,相比之下mysql只有一种表连接类型:嵌套循环连接(nested-loop),不支持排序-合并连接(sort ...

  4. JS 20180416课时训练

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. 网络是通的 yum用不了

    Loaded plugins: fastestmirror, langpacks One of the configured repositories failed (Unknown),and yum ...

  6. windows 查看端口号被占用

    1.netstat  -ano 2.tasklist | findstr xxx 3.进程管理杀掉

  7. 朴素贝叶斯(Naive Bayesian)

    简介 Naive Bayesian算法 也叫朴素贝叶斯算法(或者称为傻瓜式贝叶斯分类) 朴素(傻瓜):特征条件独立假设 贝叶斯:基于贝叶斯定理 这个算法确实十分朴素(傻瓜),属于监督学习,它是一个常用 ...

  8. [剑指offer] 50. 第一个只出现一次的字符 + map,hashmap 及其区别

    class Solution { public: int FirstNotRepeatingChar(string str) { map<char,int>mp; ;i<str.si ...

  9. 【codeforces 724E】Goods transportation

    [题目链接]:http://codeforces.com/problemset/problem/724/E [题意] 有n个城市; 这个些城市每个城市有pi单位的物品; 然后已知每个城市能卖掉si单位 ...

  10. ioremap映射函数

    一.ioremap() 函数 Linux在io.h头文件中声明了函数ioremap(),用来将I/O内存资源的物理地址映射到核心虚地址空间(3GB-4GB)中(这里是内核空间),原型如下: 1.ior ...