Coding

150. Evaluate Reverse Polish Notation

2024-01-30 2 min read

⭐⭐⭐

題目敘述

You are given an array of strings tokens that represents an arithmetic expression in a Reverse Polish Notation.

Evaluate the expression. Return an integer that represents the value of the expression.

Note that:

  • The valid operators are '+', '-', '*', and '/'.
  • Each operand may be an integer or another expression.
  • The division between two integers always truncates toward zero.
  • There will not be any division by zero.
  • The input represents a valid arithmetic expression in a reverse polish notation.
  • The answer and all the intermediate calculations can be represented in a 32-bit integer.

Example 1

Input: tokens = [“2”,“1”,"+",“3”,"*"] Output: 9 Explanation: ((2 + 1) * 3) = 9

Example 2

Input: tokens = [“4”,“13”,“5”,"/","+"] Output: 6 Explanation: (4 + (13 / 5)) = 6

Example 3

Input: tokens = [“10”,“6”,“9”,“3”,"+","-11","","/","",“17”,"+",“5”,"+"] Output: 22 Explanation: ((10 * (6 / ((9 + 3) * -11))) + 17) + 5 = ((10 * (6 / (12 * -11))) + 17) + 5 = ((10 * (6 / -132)) + 17) + 5 = ((10 * 0) + 17) + 5 = (0 + 17) + 5 = 17 + 5 = 22

解題思路

Solution

import java.util.*;

class Solution {
    public int evalRPN(String[] tokens) {
        ArrayList<Integer> arr = new ArrayList<>();

        for(int i = 0; i < tokens.length; i++){
            if(tokens[i].equals("+") || tokens[i].equals("-") || tokens[i].equals("*") || tokens[i].equals("/")){
                int temp = math(arr.get(arr.size() - 2),arr.get(arr.size() - 1),tokens[i]);
                arr.remove(arr.size() - 1);
                arr.remove(arr.size() - 1);
                arr.add(temp);
            }
            else{
                arr.add(Integer.parseInt(tokens[i]));
            }
        }

        return arr.get(0);
    }

    public int math(int a, int b, String s) {
        switch (s) {
            case "+":
                return a + b;
            case "-":
                return a - b;
            case "*":
                return a * b;
            case "/":
                return a / b;
        }
        return 0;
    }
}
#include <string>
#include <vector>
#include <iostream>
using namespace std;

class Solution {
 public:
  int evalRPN(vector<string>& tokens) {
    vector<int> arr;

    for (int i = 0; i < tokens.size(); i++) {
      if (tokens[i] == "+" || tokens[i] == "-" || tokens[i] == "*" ||
          tokens[i] == "/") {
        int tmp = math(arr[arr.size() - 2], arr[arr.size() - 1], tokens[i]);
        arr.pop_back();
        arr.pop_back();
        arr.push_back(tmp);
      } else {
        arr.push_back(stoi(tokens[i]));
      }
    }

    return arr[0];
  }

  int math(int a, int b, string s) {
    switch (s[0]) {
      case '+':
        return a + b;
      case '-':
        return a - b;
      case '*':
        return a * b;
      case '/':
        return a / b;
    }

    return 0;
  }
};
← Posts
meow~