解题思路

  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();}
};

转载于:https://www.cnblogs.com/zhangjiuding/p/9532609.html

LeetCode224. Basic Calculator (用栈计算表达式)相关推荐

  1. LeetCode Basic Calculator(用栈计算表达式的值)

    题意:给出一个计算表达式,只包含 +,-,(,),求计算结果 思路:用栈来实现 代码如下: public class Solution {private int cal(int num1, int n ...

  2. 数据结构:栈--计算表达式

    package com.stack;public class Calculator {public static void main(String[] args){String expression ...

  3. LeetCode Basic Calculator II(加减乘除计算器)

    与 LeetCode Basic Calculator(用栈计算表达式的值)相似 代码如下: public class Solution {private int cal(int num1, int ...

  4. PHP计算表达式-栈

    <?php /*** 计算表达式思路* 1+2*3-2* 思路:* 1.扫描每个字符* 2.判断是否运算符和数字* 3.数字直接进栈* 4.运算符* 1.第一个运算符直接入栈* 2.N个运算符要 ...

  5. 栈在表达式计算过程中的应用

    栈在表达式计算过程中的应用 :建立操作数栈和运算符栈.运算符有优先级. 规则: 自左至右扫描表达式,凡是遇到操作数一律进操作数栈. 当遇到运算符时,如果它的优先级比运算符栈栈顶元素的优先级高就进栈.反 ...

  6. C语言利用栈计算算式(表达式)

    本文介绍如何通过栈来实现计算算式. 首先 我们要通过多个栈对算式进行操作和计算得出答案,在计算前,我们需要先明确整个计算的流程: 获取用户输入并保存 判断算式是否合理 一些预处理-(例如:删除空格,大 ...

  7. 有趣的数据结构算法10——后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果

    有趣的数据结构算法10--后缀表达式(PRN)介绍及利用栈计算后缀表达式的结果 解题思路 实现代码 GITHUB下载连接 在前一天已经利用栈完成2进制到8进制的转换.但是栈的应用方面还有很多,本次我将 ...

  8. 使用栈计算前缀表达式

    在介绍前缀表达式和后缀表达式之前我们先说我们最熟悉的中缀表达式:例如,(3+4)*5-6,这就是中缀表达式,是人经常使用的运算表达式,最容易让人理解,但是对于计算机来说就不太友好了,计算机对前缀表达式 ...

  9. UESTC--ICODING栈 后缀表达式计算

    UESTC--ICODING栈 后缀表达式计算 题目: 相关定义如下: 代码: 文章供学习交流参考 题目: 请使用已定义好的栈完成后缀表达式计算: (1)如果是操作数,直接入栈 (2)如果是操作符op ...

最新文章

  1. 过年也学(nei)习 (juan)| 图像特征提取与匹配技术
  2. SignalR Core尝鲜
  3. 一个网络公司的任职要求
  4. Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
  5. Windows、Linux系统安装JDK配置Java环境变量
  6. Windows消息机制详解-2
  7. java中解决request中文乱码问题
  8. jsf el 表达式_JSF表达式语言– JSF EL
  9. git学习(二)查看log历史记录
  10. Struts2---ActionContext和ServletActionContext小结
  11. dubbo+zookeper与webservice的简单对比
  12. java子弹集合_Java使用线程并发库模拟弹夹装弹以及发射子弹的过程
  13. matlab学习网站
  14. 各大市场应用上架整理
  15. maven 汉字转拼音
  16. matlab里方框一个叉号,Word输入×叉号和方框打叉方法
  17. 年薪和月薪有什么区别
  18. 不知道怎么识别手写文字?快来看这些手写文字识别成文档软件
  19. 搭建多节点Linux环境
  20. 小蜜蜂商城系统解析,结合众筹卖货活动,流水千万

热门文章

  1. Java实现几种常见排序方法
  2. seci-log1.02日志分析软件版本升级了
  3. C#技术分享【PDF转换成图片——13种方案】
  4. Revit Family API 添加参数与尺寸标注
  5. 将frm,myi,myd文件打包成sql文件
  6. Win7 一键获得管理所有权限(最高权限)注册表
  7. officescan客户端迁移和升级
  8. 重构-打造爱因斯坦谜题最快算法
  9. Work Measurement - 1
  10. 申请英国学校最晚什么时候考出雅思呢?