[LeetCode]224. Basic Calculator
来源:互联网 发布:java rectangle类 编辑:程序博客网 时间:2024/05/29 19:14
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open (
and closing parentheses )
, the plus +
or minus sign -
, non-negative integers and empty spaces .
You may assume that the given expression is always valid.
Some examples:
"1 + 1" = 2" 2-1 + 2 " = 3"(1+(4+5+2)-3)+(6+8)" = 23
思路:有两个栈,一个栈为数字栈存放数和‘(’,另一个栈为符号栈存放符号
从字符串第一位开始判断,
如果为空,则跳过
如果为‘+’、‘-’压入符号栈
如果为‘)’,则从数字栈中取出一个数字,并且弹出‘(’,进行判断
如果为数字则循环直到符号或空格找到所有数字,
如果当前数字栈为空或者最上层为‘(’则直接压入数字栈
否则说明可以进行运算,则从符号栈中取出一个符号,从数字栈中取出一个数字,进行计算后放入数字栈
最后结果虽然AC,但是时间并不理想
public class Solution { public int calculate(String s) {Stack<String> numberStack=new Stack<String>();Stack<Character> signStack=new Stack<Character>(); for(int i=0;i<s.length();i++){ char c=s.charAt(i); if(c!=' '){ if(c=='('){ numberStack.push(String.valueOf(c)); }else if(c==')'){ String aa=numberStack.pop(); numberStack.pop(); if(numberStack.isEmpty()||numberStack.peek().equals("(")){ numberStack.push(aa); }else{ int b=Integer.valueOf(numberStack.pop()); int a=Integer.valueOf(aa); char sign=signStack.pop(); if(sign=='+'){ String re=String.valueOf(b+a); numberStack.push(re); }else{ String re=String.valueOf(b-a); numberStack.push(re); } } }else if(c=='+'||c=='-'){ signStack.push(c); }else{ String ss=""; int index=i; while(index<s.length()&&s.charAt(index)>='0'&&s.charAt(index)<='9'){ ss+=s.charAt(index); index++; } i=index-1; //System.out.println(ss); //System.out.println(numberStack); if(numberStack.isEmpty()||numberStack.peek().equals("(")){ numberStack.push(ss); }else{ int b=Integer.valueOf(numberStack.pop()); int a=Integer.valueOf(ss); char sign=signStack.pop(); if(sign=='+'){ String re=String.valueOf(b+a); numberStack.push(re); }else{ String re=String.valueOf(b-a); numberStack.push(re); } } } } } return Integer.valueOf(numberStack.pop()); }}
0 0
- [leetcode] 224.Basic Calculator
- [leetcode] 224. Basic Calculator
- Leetcode-224.Basic Calculator
- [LeetCode]224. Basic Calculator
- leetcode 224. Basic Calculator
- leetcode.224. Basic Calculator
- LeetCode-224.Basic Calculator
- [LeetCode]224. Basic Calculator
- 【leetcode】224. Basic Calculator
- [LeetCode]224. Basic Calculator
- LeetCode 224.Basic Calculator
- LeetCode 224. Basic Calculator
- leetcode 224. Basic Calculator
- 【LeetCode】Basic Calculator && Basic Calculator II
- LeetCode - Basic Calculator & Basic Calculator II
- Leetcode之Basic Calculator & Basic Calculator II
- LeetCode 224. Basic Calculator(基本计算器)
- [leetcode] 224. Basic Calculator 解题报告
- 一看你就懂,超详细java中的ClassLoader详解
- day1:前端学习视频笔记
- 缓存更新的套路
- 生成全排列(STL、dfs)
- 代码重构原则
- [LeetCode]224. Basic Calculator
- 浅谈对主成分分析(PCA)算法的理解
- Android studio开发 java.lang.IllegalArgumentException: already added:解决
- linux下的c语言入门-day4
- 选择语句 if
- bellman-ford算法 最短路
- 企业应用hadoop视频教程多套合集--百度网盘下载
- 半闲居士视觉SLAM十四讲笔记(1)前言
- mysql登录出现1045错误修改方法