[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