Skip to main content

Command Palette

Search for a command to run...

Evaluate Reverse Polish Notation (Leetcode #150)

Published
2 min readView as Markdown
N

I am a beginner coder who wants to keep track of my coding progress. I will post my LeetCode solutions here. Please feel free to give me advice or suggestions on my code.

Also, in the future, I will be posing my data science-related project here as well

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 theexpression.

Note that:

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

Constraints:

Answer:

This question required a data structure that support LIFO (Last in first out). This can be seen as an operator will always be between the last 2 numbers.

If you understand this logic the code is quite simple

class Solution(object):
    def evalRPN(self, tokens):
        """
        :type tokens: List[str]
        :rtype: int
        """
        stack = []
        for c in tokens:
            if c == '+':
                stack.append(stack.pop() + stack.pop())

            elif c == '-':
                a,b = stack.pop(), stack.pop()
                stack.append(b - a)

            elif c == '*':
                stack.append(stack.pop() * stack.pop())

            elif c == '/':
                a,b = stack.pop(), stack.pop()
                stack.append(int(b / a))

            else:
                stack.append(int(c))
        return stack[0]

We will keep adding to the stack until we reach an operator which then will perform on the two latest numbers.

Time Complexity:

O(N) Since we are only looping through the loop ounce and the popping and operation are all constant time. O(1) * N = O(N)

Space Complexity:
O(N) We need to create a stack to keep track of the notion which will have max length of N hence this shill give us a space complexity of O(N)

More from this blog

Algo

37 posts