`

LintCode - Infix to Postfix / Convert Expression to Reverse Polish Notation

 
阅读更多

Given an expression string array, return the Reverse Polish notation of this expression. (remove the parentheses)

Aka, convert infix notation to postfix notation.

 

Example

For the expression [3 - 4 + 5] (which denote by ["3", "-", "4", "+", "5"]), return[3 4 - 5 +] (which denote by ["3", "4", "-", "5", "+"])

public List<String> convertToRPN(String[] expression) {
    List<String> rpn = new ArrayList<>();
    Stack<String> opstack = new Stack<>();
    for(String op:expression) {
        if("+-*/".contains(op)) {
            while(!opstack.isEmpty() && getPriority(opstack.peek()) >= getPriority(op)) {
                rpn.add(opstack.pop());
            }
            opstack.push(op);
        } else if("(".equals(op)) {
            opstack.push(op);
        } else if(")".equals(op)) {
            while(!"(".equals(opstack.peek())) {
                rpn.add(opstack.pop());
            }
            opstack.pop();
        }
        else {
            rpn.add(op);
        }
    }
    while(!opstack.isEmpty()) {
        rpn.add(opstack.pop());
    }
    return rpn;
}
private int getPriority(String s) {
    char c = s.charAt(0);
    if(c == '+' || c== '-') {
        return 1;
    } else if(c == '*' || c == '/') {
        return 2;
    }
    return 0;
}

 

 

分享到:
评论

相关推荐

    notation-infix-postfix-prefix:在无记名的情况下进行转换的程序,可以将输入后的信息,输入后的信息,输入后的信息和输入后的信息进行转换

    标题和描述中提到的"notation-infix-postfix-prefix"是一个关于数学表达式表示法的转换话题,主要包括中缀表示(infix notation)、后缀表示(postfix notation)和前缀表示(prefix notation)。这些表示法在计算机...

    数据结构利用栈求表达式的值

    栈被称为“后进先出”(LIFO)的数据结构,这意味着最后入栈的元素将首先出栈,这一特性使得栈在处理逆波兰表示法(Reverse Polish Notation, RPN)或中缀表达式转换为后缀表达式等问题时非常有效。 首先,我们需要...

    中缀表达式转换成后缀表达式

    这里我们关注的是将中缀表达式转换为后缀表达式,也称为逆波兰表示法(Reverse Polish Notation, RPN)。中缀表达式是我们通常使用的数学表达式形式,其中操作符位于操作数之间,例如 "2 + 3"。而后缀表达式则是操作...

    stack实现运算表达式(C++实现)

    这种解析方法通常称为后缀表达式(Reverse Polish Notation, RPN)或逆波兰表示法。 首先,我们需要理解运算符优先级和括号的概念。在给定的表达式"3+(3*5)"中,乘法操作符(*)具有比加法操作符(+)更高的优先级,这...

    详细问题和要求

    对于表达式树,它产生了后缀表达式,也称为逆波兰表示法(Reverse Polish Notation, RPN),运算符出现在操作数之后,如:`2 3 +`。 在提供的代码中,这三个函数的模板参数 `Item` 表示节点可以存储的任何类型的...

    中缀转后缀计算详解+代码

    中缀表达式是我们日常数学运算中常见的形式,例如 "2 + 3 * 4",而后缀表达式,也称为逆波兰表示法(Reverse Polish Notation,RPN),是一种没有括号且运算符位于其操作数之后的表示方式,如 "2 3 4 * +"。...

    rpn.zip_rpn_表达式树c++

    在这个特定的项目“rpn.zip_rpn_表达式树c++”中,我们主要关注如何将中缀表达式(Infix Expression)转换为后缀表达式(Postfix Expression),并生成表达式树,最终在控制台上以图形化的方式展示出来。后缀表达式...

    表达式的值

    为了进行求值,我们需要将其转换成其他形式,如前缀表达式(Prefix)或后缀表达式(Postfix),也称为逆波兰表示法(Reverse Polish Notation, RPN)。 在C++中,中序表达式求值通常通过使用栈(Stack)数据结构来...

    表达式计算_离散数学课程设计

    后缀表达式通常与逆波兰计算器(RPN,Reverse Polish Notation)一起使用,解析效率高,易于机器处理。 **转换过程** 在实际应用中,我们经常需要将这些表达式相互转换。例如,从用户输入的中缀表达式转换为后缀...

Global site tag (gtag.js) - Google Analytics