其他分享
首页 > 其他分享> > LeetCode 0150 Evaluate Reverse Polish Notation

LeetCode 0150 Evaluate Reverse Polish Notation

作者:互联网

原题传送门

1. 题目描述

2. Solution 1

1、思路分析
遍历tokens中的字符,设工作变量是token,若token是数字则直接入栈,若是运算符,则弹出两个操作数,并根据运算符进行运算,之后将计算结果入栈。直到遍历完成,最后返回栈顶元素。

2、代码实现

package Q0199.Q0150EvaluateReversePolishNotation;

import java.util.Deque;
import java.util.LinkedList;

/*
   method 1: 栈
 */
public class Solution1 {

    public int evalRPN(String[] tokens) {
        Deque<Integer> stack = new LinkedList<>();
        for (String token : tokens) {
            if (isNumber(token)) stack.push(Integer.parseInt(token));
            else {
                int num2 = stack.pop();
                int num1 = stack.pop();
                switch (token) {
                    case "+":
                        stack.push(num1 + num2);
                        break;
                    case "-":
                        stack.push(num1 - num2);
                        break;
                    case "*":
                        stack.push(num1 * num2);
                        break;
                    case "/":
                        stack.push(num1 / num2);
                        break;
                }
            }

        }
        return stack.pop();
    }

    public boolean isNumber(String token) {
        return !("+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token));
    }
}

3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(n)

3. Solution 2

1、思路分析
使用数组代替栈

2、代码实现

package Q0199.Q0150EvaluateReversePolishNotation;

/*
   用数组代替栈
 */
class Solution2 {

    boolean isOp(String str) {
        if (str.length() != 1) return false;
        char ch = str.charAt(0);
        return ch == '+' || ch == '*' || ch == '-' || ch == '/';
    }

    int calc(String op, int v2, int v1) {
        switch(op.charAt(0)) {
            case '+' : return v1 + v2;
            case '-' : return v1 - v2;
            case '*' : return v1 * v2;
            case '/' : return v1 / v2;
        }
        return 0;
    }

    public int evalRPN(String[] tokens) {
        int[] s = new int[tokens.length];
        int i = 0;
        for (String token : tokens) {
            if (isOp(token)) {
                int v2 = s[--i];
                int v1 = s[--i];
                s[i++] = calc(token, v2, v1);
            } else {
                s[i++] = Integer.parseInt(token);
            }
        }
        return s[0];
    }
}

3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(1)

标签:case,return,Reverse,Notation,int,Evaluate,token,stack,String
来源: https://www.cnblogs.com/junstat/p/16304123.html