Evaluate Reverse Polish Notation

26 篇文章 0 订阅

自己一开始竟然还写了一种反着做的,也是棒棒哒。。。

public class Solution {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        String operators = "+-*/";
        for (String str: tokens) {
            if (!operators.contains(str)) {
                stack.push(Integer.valueOf(str));
            } else {
                int num1 = stack.pop();
                int num2 = stack.pop();
                int index = operators.indexOf(str);
                switch(index){
                    case 0: 
                        stack.push(num1 + num2);break;
                    case 1: 
                        stack.push(num2 - num1);break;
                    case 2: 
                        stack.push(num1 * num2);break;
                    case 3: 
                        stack.push(num2 / num1);break;
                }
            }
        }
        return stack.pop();
    }
}


//啦啦啦哈哈哈海昏侯
public static int evalRPN(String[] tokens) {
        Stack<String> stack1 = new Stack<>();
        Stack<String> stack2 = new Stack<>();
        for (String str: tokens) {
            stack1.push(str);
        }
        int num = 0, result = 0;
        boolean flag = true;
        while (!stack1.isEmpty()) {
            String str = stack1.pop();
            if (str.equals("+") || str.equals("-") || str.equals("*") || str.equals("/")) {
                stack2.push(str);
                num = 0;
            } else {
                if (num == 0) {
                    stack2.push(str);
                    num++;
                } else {
                    int num1 = Integer.valueOf(stack2.pop());
                    int num2 = Integer.valueOf(str);
                    String operator = stack2.pop();
                    if (operator.equals("+")) {
                        result = num1 + num2;
                    } else if (operator.equals("-")) {
                        result = num2 - num1;
                    } else if (operator.equals("*")) {
                        result = num1 * num2;
                    } else if (operator.equals("/")) {
                        result = num2 / num1;
                    }
                    num = 1;
                    while (!stack2.isEmpty()&&!(stack2.peek().equals("+") || stack2.peek().equals("-") || stack2.peek().equals("*") || stack2.peek().equals("/"))) {
                        num1 = Integer.valueOf(stack2.pop());
                        num2 = result;
                        operator = stack2.pop();
                        if (operator.equals("+")) {
                            result = num1 + num2;
                        } else if (operator.equals("-")) {
                            result = num2 - num1;
                        } else if (operator.equals("*")) {
                            result = num1 * num2;
                        } else if (operator.equals("/")) {
                            result = num2 / num1;
                        }
                    }
                    stack2.push(String.valueOf(result));
                }
            }
        }
        // while (!stack2.isEmpty()) {
        //     if (stack2.size() == 1) {
        //         return Integer.valueOf(stack2.pop());
        //     }
        //     int num1 = Integer.valueOf(stack2.pop());
        //     int num2 = Integer.valueOf(stack2.pop());
        //     String operator = stack2.pop();
        //     if (operator.equals("+")) {
        //         result = num1 + num2;
        //     } else if (operator.equals("-")) {
        //         result = num2 - num1;
        //     } else if (operator.equals("*")) {
        //         result = num1 * num2;
        //     } else if (operator.equals("/")) {
        //         result = num2 / num1;
        //     }
        // }
        return Integer.valueOf(stack2.pop());
    }

Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are +-*/. Each operand may be an integer or another expression.

Some examples:

  ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值