zoukankan      html  css  js  c++  java
  • LeetCode——Basic Calculator

    Description:

    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.

    用两个操作栈来处理,具体见代码。

    public class Solution {
        public static int calculate(String s) {
            Stack<Integer> num = new Stack<>();
            Stack<Character> op = new Stack<>();
            op.push('+');
            int n = s.length();
            if(n < 1) return 0;
            for(int i=0; i<n; ) {
            	if(s.charAt(i) == ' ') {
            		i ++;
            	}
            	else if(s.charAt(i) == '(') {
            		op.push('(');
            		op.push('+');
            		i ++;
            	}
            	else if(isOp(s.charAt(i))) {
            		op.push(s.charAt(i));
            		i ++;
            	}
            	//523   +-(++
            	else if(s.charAt(i) == ')') {
            		int res = 0;
                    while (!op.empty() && !(op.peek() == '(')) {  
                    	int temp = num.peek();
                    	if (op.peek() == '-') temp = -temp;
                    	res += temp;
                    	num.pop();
                    	op.pop();
                    }
                    System.out.println(res);
                    op.pop();
                    num.push(res);
                    i ++;
            	}
            	else {
            		int temp = 0;
            		while(i < n && isDigit(s.charAt(i))) {
            			temp = temp * 10;
            			temp += s.charAt(i) - '0';
            			i ++;
            		}
            		
            		num.push(temp);
            	}
            	
            }
            int res = 0;
            while (!op.empty()) {  
            	int temp = num.peek();  
            	if (op.peek() == '-') temp = -temp;  
            	res += temp;  
            	num.pop();  
            	op.pop();  
            }  
    
            return res;
            
        }
    	public static boolean isOp(char c) {
    		if(c == '+' || c == '-') {
    			return true;
    		}
    		else {
    			return false;
    		}
    	}
    	public static boolean isDigit(char c) {
    		if(c >= '0' && c <='9') {
    			return true;
    		}
    		else {
    			return false;
    		}
    	}
    }
    
  • 相关阅读:
    雨课堂知识点总结(六)
    软件构造雨课堂知识点总结(五)
    软件构造雨课堂知识点总结(四)
    软件构造雨课堂知识点总结(三)
    0-N-0计数的优化写法
    Nginx TP5环境配置
    小程序跳转H5及其他页面
    mysql中varchar类型和datetime类型字段进行比较
    微信小程序开发者工具更新后报很多错误
    php后台解决跨域
  • 原文地址:https://www.cnblogs.com/wxisme/p/4614848.html
Copyright © 2011-2022 走看看