Basic Calculator

2017-05-04  本文已影响13人  我的轩辕

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

Note: Do not use the eval built-in library function.

题目中只有+ - ( )。遍历字符串,对于每个字符c:


    /**
     * 计算带括号的string的值
     * @param s
     * @return
     */
    public int calculate(String s) {
        if(s==null){
            throw  new IllegalArgumentException();
        }

        int res=0; //结果值
        int flag=1; //记录前面的符号,加为1,减为-1

        Stack<Integer> stack=new Stack<>(); 

        for (int i=0;i<s.length();i++){
            char c=s.charAt(i);
            int val=0;
            if(Character.isDigit(c)){
                val=c-'0';
                while (i+1<s.length() && Character.isDigit(s.charAt(i+1))){
                    val=val*10+s.charAt(++i)-'0';
                }

                res+=flag*val;
            }
            else if(c=='+'){
                flag=1;
            }else if(c=='-'){
                flag=-1;
            }else if(c=='('){
                  //遇到括号先压栈结果,再压栈符号
                stack.push(res);
                stack.push(flag);
                res=0;
                flag=1;
            }else if(c==')'){
                res=res*stack.pop()+stack.pop();
            }
        }
        System.out.print(res);
        return res;
    }
上一篇 下一篇

猜你喜欢

热点阅读