`

LintCode - Expression Evaluation

 
阅读更多

Given an expression string array, return the final result of this expression.

Hint: Shunting-yard algorithm

Example

For the expression 2*6-(23+7)/(1+2), input is

[
  "2", "*", "6", "-", "(",
  "23", "+", "7", ")", "/",
  (", "1", "+", "2", ")"
],

return 2

Note

The expression contains only integer+-*/().

public int evaluateExpression(String[] expression) {
    Stack<String> stack = new Stack<>();
    Queue<String> queue = new LinkedList<>();
    for(String op:expression) {
        if("+-*/".contains(op)) {
            if(!stack.isEmpty() && getPriority(stack.peek()) >= getPriority(op)) {
                queue.offer(stack.pop());
            }
            stack.push(op);
        } else if("(".equals(op)) {
            stack.push(op);
        } else if(")".equals(op)) {
            while(!"(".equals(stack.peek())) {
                queue.offer(stack.pop());
            }
            stack.pop();
        } else {
            queue.offer(op);
        }
    }
    while(!stack.isEmpty()) {
        queue.offer(stack.pop());
    }
    return evaluateRPN(queue);
}

private int getPriority(String op) {
    char c = op.charAt(0);
    if(c == '+' || c == '-') {
        return 1;
    } else if(c=='*' || c=='/') {
        return 2;
    }
    return 0;
}

private int evaluateRPN(Queue<String> rpn) {
    Stack<Integer> stack = new Stack<>();
    while(!rpn.isEmpty()) {
        String op = rpn.poll();
        if("+-*/".contains(op)) {
            int result = 0;
            int b = stack.pop();
            int a = stack.pop();
            if(op.equals("+")) {
                result = a + b;
            } else if(op.equals("-")) {
                result = a - b;
            } else if(op.equals("*")) {
                result = a * b;
            } else if(op.equals("/")) {
                result = a / b;
            }
            stack.push(result);
        } else {
            stack.push(Integer.parseInt(op));
        }
    }
    if(stack.isEmpty()) return 0;
    return stack.pop();
}

 

 

分享到:
评论

相关推荐

    开发工具 spring-expression-4.3.6.RELEASE

    开发工具 spring-expression-4.3.6.RELEASE开发工具 spring-expression-4.3.6.RELEASE开发工具 spring-expression-4.3.6.RELEASE开发工具 spring-expression-4.3.6.RELEASE开发工具 spring-expression-4.3.6.RELEASE...

    spring-expression-5.2.0.RELEASE-API文档-中文版.zip

    赠送jar包:spring-expression-5.2.0.RELEASE.jar; 赠送原API文档:spring-expression-5.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-expression-5.2.0.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...

    spring-expression-5.3.15-API文档-中文版.zip

    赠送jar包:spring-expression-5.3.15.jar; 赠送原API文档:spring-expression-5.3.15-javadoc.jar; 赠送源代码:spring-expression-5.3.15-sources.jar; 赠送Maven依赖信息文件:spring-expression-5.3.15.pom;...

    spring-expression-5.3.10-API文档-中英对照版.zip

    赠送jar包:spring-expression-5.3.10.jar;赠送原API文档:spring-expression-5.3.10-javadoc.jar;赠送源代码:spring-expression-5.3.10-sources.jar;赠送Maven依赖信息文件:spring-expression-5.3.10.pom;...

    spring-expression-5.3.15-API文档-中英对照版.zip

    赠送jar包:spring-expression-5.3.15.jar; 赠送原API文档:spring-expression-5.3.15-javadoc.jar; 赠送源代码:spring-expression-5.3.15-sources.jar; 赠送Maven依赖信息文件:spring-expression-5.3.15.pom;...

    spring-expression-5.2.7.RELEASE-API文档-中文版.zip

    赠送jar包:spring-expression-5.2.7.RELEASE.jar; 赠送原API文档:spring-expression-5.2.7.RELEASE-javadoc.jar; 赠送源代码:spring-expression-5.2.7.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...

    spring-expression-5.0.10.RELEASE-API文档-中文版.zip

    赠送jar包:spring-expression-5.0.10.RELEASE.jar; 赠送原API文档:spring-expression-5.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-expression-5.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring...

    spring-expression-5.0.5.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-expression-5.0.5.RELEASE.jar; 赠送原API文档:spring-expression-5.0.5.RELEASE-javadoc.jar; 赠送源代码:spring-expression-5.0.5.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring-...

    spring-expression-5.0.10.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-expression-5.0.10.RELEASE.jar; 赠送原API文档:spring-expression-5.0.10.RELEASE-javadoc.jar; 赠送源代码:spring-expression-5.0.10.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring...

    spring-expression-4.2.6.RELEASE

    spring-expression-4.2.6.RELEASE,欢迎下载,如有疑问,请留意

    spring-expression-4.3.20.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-expression-4.3.20.RELEASE.jar 赠送原API文档:spring-expression-4.3.20.RELEASE-javadoc.jar 赠送源代码:spring-expression-4.3.20.RELEASE-sources.jar 包含翻译后的API文档:spring-...

    spring-expression-4.3.12.RELEASE.jar

    spring框架,maven下来的spring-expression-4.3.12.RELEASE.jar

    A-simple-expression-evaluation-class.zip_class A

    标题"A-simple-expression-evaluation-class.zip_class A"指向的是一个用于计算简单数学表达式的Java类,我们将其称为"表达式求值类"。这个类能够处理基本的算术运算,包括加法、减法、乘法和除法。在编程领域,这种...

    spring-expression-5.3.10-API文档-中文版.zip

    赠送jar包:spring-expression-5.3.10.jar; 赠送原API文档:spring-expression-5.3.10-javadoc.jar; 赠送源代码:spring-expression-5.3.10-sources.jar; 赠送Maven依赖信息文件:spring-expression-5.3.10.pom;...

    Facial-Expression-Recognition.Pytorch-master_情绪识别_

    在这个Pytorch项目中,"Facial-Expression-Recognition.Pytorch-master"是一个实现这一功能的源代码库。下面我们将深入探讨相关的关键知识点。 1. **深度学习基础**: 深度学习是机器学习的一个分支,它模仿人脑...

    spring-expression-3.2.1.RELEASE.zip

    标题中的"spring-expression-3.2.1.RELEASE.zip"是一个Spring框架的组件,Spring Expression Language (SpEL) 的特定版本。SpEL是Spring框架的一部分,它提供了一种强大的表达式语言,用于在运行时查询和操作对象图...

    Macro- and Micro-Expression Spotting in Long Videos Using Spatio-temporal Strain

    微观表情(Micro-Expression)是指那些极快速、不易察觉的面部表情,通常在250毫秒以下,它们通常被用来表示人们在试图掩饰或控制自己真实情绪时的自然反应。相对的,宏表情(Macro-Expression)则要明显得多,持续...

    spring-expression-4.3.12.RELEASE-API文档-中英对照版.zip

    赠送jar包:spring-expression-4.3.12.RELEASE.jar; 赠送原API文档:spring-expression-4.3.12.RELEASE-javadoc.jar; 赠送源代码:spring-expression-4.3.12.RELEASE-sources.jar; 赠送Maven依赖信息文件:spring...

    spring-expression-5.3.7-API文档-中文版.zip

    赠送jar包:spring-expression-5.3.7.jar; 赠送原API文档:spring-expression-5.3.7-javadoc.jar; 赠送源代码:spring-expression-5.3.7-sources.jar; 赠送Maven依赖信息文件:spring-expression-5.3.7.pom; ...

    spring-expression-5.3.12-API文档-中英对照版.zip

    赠送jar包:spring-expression-5.3.12.jar; 赠送原API文档:spring-expression-5.3.12-javadoc.jar; 赠送源代码:spring-expression-5.3.12-sources.jar; 赠送Maven依赖信息文件:spring-expression-5.3.12.pom;...

Global site tag (gtag.js) - Google Analytics