给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。

整数除法仅保留整数部分。

示例 1:

输入:s = “3+2*2”
输出:7

解题思路

利用两个栈,一个记录操作数,一个记录操作符,用-1和1表示操作符加减

代码

class Solution {public int calculate(String s) {Stack<Integer> stack=new Stack<>();Stack<Integer> characterStack=new Stack<>();int n=s.length();int i = 0,sign=1,cur=0;while ( i < n) {char c = s.charAt(i);if(c==' '){i++;continue;}if(Character.isDigit(c))//取出操作数进栈{int sum=0;while (i < n&&Character.isDigit(s.charAt(i))){sum*=10;sum+=s.charAt(i)-'0';i++;}stack.push(sum);i--;}else {if(c=='+'||c=='-'){if(!characterStack.isEmpty())//前面出现同级的加减运算,计算前面的{stack.push(stack.pop()*characterStack.pop()+stack.pop());}characterStack.push(c=='+'?1:-1);//操作符入栈}else// 操作符为*/{int sum=0;i++;while (s.charAt(i)==' ') i++;while (i < n&&Character.isDigit(s.charAt(i)))//取下一个操作数进行操作{sum*=10;sum+=s.charAt(i)-'0';i++;}if(c=='*')stack.push(stack.pop()*sum);elsestack.push(stack.pop()/sum);i--;}}i++;}return  stack.size()==1?stack.pop():stack.pop()*characterStack.pop()+stack.pop();}
}

leetcode 227. 基本计算器 II(栈)相关推荐

  1. [leetcode]227. 基本计算器 II

    class Solution {// 算法描述如下: // (1)操作符栈初始化, 将结束符′#′进栈, 然后读入中缀表达式字符流的首字符ch . // (2)重复执行以下步骤, 直到ch =′#′, ...

  2. 227. 基本计算器 II

    227. 基本计算器 II Ideas 对于表达式计算的问题,一般第一个想到的就是stack,每次从表达式中拿一个值放到stack中,如果是乘除,因为优先级比较高,所以先计算,然后把计算结果appen ...

  3. 693. 交替位二进制数 / 227. 基本计算器 II / 264. 丑数 II

    693. 交替位二进制数[简单题][每日一题] 思路:[位运算] 排除特殊情况n=1,此时return true. 将n转为二进制字符串,依次将相邻两位数字进行异或运算. 异或运算的结果为flag,如 ...

  4. leetcode 227. Basic Calculator II | 227. 基本计算器 II(中缀表达式求值)

    题目 https://leetcode.com/problems/basic-calculator-ii/ 题解 这道题是 中缀表达式求值 的简化版(因为没有左右括号运算),不过输入的形式有两个处理起 ...

  5. LeetCode Add Two Numbers II(栈)

    问题:给出两个链表表示的整数,求其和 思路:因为链表的第一个结点是最高位,最后一个结点是最低位.先将两个链表放入两个栈中.然后从两个栈中取出元素,从低到高位相加. 具体代码参考: https://gi ...

  6. leetcode 224. 基本计算器(栈)

    给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值. 示例 1: 输入:s = "1 + 1" 输出:2 示例 2: 输入:s = " 2-1 + 2 ...

  7. 227. 基本计算器 II。

    给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值. 整数除法仅保留整数部分. 你可以假设给定的表达式总是有效的.所有中间结果将在 [-231, 231 - 1] 的范围内. 注意: ...

  8. 【一天一道Leetcode】基本计算器的延伸问题

    本篇推文共计2000个字,阅读时间约3分钟. 01 题目描述 题目描述: 给你一个字符串表达式s,请你实现一个基本计算器来计算并返回它的值. 整数除法仅保留整数部分. 示例: 输入:s = " ...

  9. Leetcode - Subsets I,II

    Leetcode - 078. Subsets 这道题重定义了什么叫可行解: 一般而言,可行解需要满足强约束性条件集,而本题的可行解就是单一弱约束性条件(distinct integers,只需要当前 ...

最新文章

  1. linux ftp 团队认证,linux下ftp和ftps以及ftp基于mysql虚拟用户认证服务器的搭建
  2. RSA, ACS5.X 集成配置
  3. 使用Action启动/关闭Service
  4. android 监听手机电量变化
  5. SAP CRM Fiori应用My Lead的常见问题和解答
  6. iOS uiviewcontroller 添加另外一个controller的View
  7. python输入三行数据_3行Python代码就能获取海量数据?
  8. [python]数字编程练习
  9. 9.RabbitMQ实战 --- 使用REST API控制Rabbit
  10. ai/ml_您应该在本周(7月11日)阅读有趣的AI / ML文章
  11. Qt 窗口嵌入桌面 窗口 放在桌面
  12. HASH加密算法:MD4、MD5、SHA1
  13. linux 上u盘打不开了,U盘打不开怎么办-八种方法汇总
  14. 云计算中网络基础知识(升级版)
  15. [病毒分析]远程木马创建傀儡进程分析
  16. python arp断网攻击_局域网arp断网攻击
  17. Android studio Android源码开发环境搭建
  18. 知名学者,全职加盟C9高校!
  19. Reverse-it
  20. BZOJ1791 基环树直径

热门文章

  1. 在ARM开发板的嵌入式linux系统上运行的QT程序,必须得要在linux里用QT编吗
  2. 【数据结构】对快速排序原理的理解(图解,通俗易懂)
  3. makefile的两个变量(自动变量和普通变量)
  4. 企业级项目实战讲解!java的war包能直接改名么
  5. Java架构师必备框架技能核心笔记,工作感悟
  6. 大厂也在用的6种数据脱敏方案,醍醐灌顶!
  7. 微信公众号接入开发者模式,服务器配置Token验证
  8. Eclipse可以执行jsp文件却无法访问Tomcat主页
  9. JMETER从JSON响应中提取数据
  10. ORACLE1.21 PLSQL 01