224. 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.

Subscribe to see which companies asked this question

Stack 存起来就行

public class Solution {
    private int calc(Stack<String> stack2){
        int ret = 0;
        int state = 1;//1为加0为减
        while(!stack2.empty()){
            int num = 0;
            String tem = stack2.pop();
            if(tem.equals(")"))break;
            else if(tem.equals("("))num=calc(stack2);
            else if(tem.equals("+")){state=1;
                continue;
            }
            else if(tem.equals("-")){state=0;
                continue;
            }else {
                num=Integer.parseInt(tem);
            }
            if(state==1){
                ret=ret+num;
            }else{
                ret=ret-num;
            }
        }
        return ret;
    }
    public int calculate(String s) {
        Stack<String> stack=new Stack<>();
        Stack<String> stack2 = new Stack<>();
        int length = s.length();
        for(int i=length-1;i>=0;){
            char k = s.charAt(i);
            if(k==' '){
                i--;
                continue;
                
            }
            if(k==')'||k=='('||k=='+'||k=='-'){
                String t = ""+s.charAt(i);
                i--;
                stack2.push(t);
                continue;
                
            }
            String t = "";
            while(i>=0&&(s.charAt(i)==' '||('0'<=s.charAt(i)&&'9'>=s.charAt(i)))){
                k=s.charAt(i);
                if(k==' '){
                    i--;
                    continue;
                }
                t = k+t;
                i--;
            }
            stack2.push(t);
        }
        return calc(stack2);
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值