Basic Calculator

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:

  • 如果是数字,则一直遍历到非数字字符,把数字找出,并与结果相加
  • 如果是+-符号,将sign设置成对应的值
  • 如果是(,将rt和sign压入栈中,重置rt和sign
  • 如果是),将sign和rt弹出栈,并计算结果

    /**
     * 计算带括号的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;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容