【算法】逆波兰式求值


逆波兰式求值

概念:

前缀表达式(波兰式):二元运算符总是置于与之相关的两个运算对象之前,所以,这种表示法也称为前缀表达式。例子:+12
中缀表达式:例子:1+2
后缀表达式(逆波兰式):例子:21+

解题思路:

利用数据结构,遍历数组。
1、遇见数字,直接入栈。
2、遇见符号:
a、弹出栈顶的右操作数。
b、弹出栈顶的左操作数。
c、符号转换为运算符,2个数字计算并将结果入栈。
3、遍历结束则栈中的唯一数字就是最后的结果值。

Java版:

 public int evalRPN(String[] tokens) {
        Stack stack = new Stack();
        
        for (int i = 0; i < tokens.length; i++) {
            switch (tokens[i]) {
            case "+":
                stack.push(stack.pop() + stack.pop());
                break;
            case "-":
                stack.push(-stack.pop() + stack.pop());
                break;
            case "*":
                stack.push(stack.pop() * stack.pop());
                break;  
            case "/":
                Integer pre = stack.pop();
                stack.push(stack.pop() / pre);
                break;
            default:
                stack.push(Integer.valueOf(tokens[i]));
                break;
            }
        }
        
        return stack.pop();
    }

Objective-C版:

OC版的解法

你可能感兴趣的:(【算法】逆波兰式求值)