zoukankan      html  css  js  c++  java
  • [leecode]Evaluate Reverse Polish Notation

    Evaluate Reverse Polish Notation

    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 

    算法思路:

    很经典的stack应用,书中例题,遇到数字压栈,遇到符号弹栈,并将结果压栈,最后返回栈顶元素。

     1 public class Solution {
     2     public int evalRPN(String[] tokens) {
     3         if(tokens == null || tokens.length == 0) return 0;
     4         String[] operand = new String[]{"+","-","*","/"};
     5         Set<String> set = new HashSet<String>(Arrays.asList(operand));
     6         Stack<Integer> num = new Stack<Integer>();
     7         for(String s : tokens){
     8             if(!set.contains(s)){
     9                 num.push(Integer.valueOf(s));
    10             }else{
    11                 int b = num.pop();
    12                 int a = num.pop();
    13                 switch(s){
    14                     case "*": num.push(a * b); break;
    15                     case "+": num.push(a + b); break;
    16                     case "-": num.push(a - b); break;
    17                     case "/": num.push(a / b); break;
    18                     default : break;
    19                 }
    20             }
    21         }
    22         return num.pop();
    23     }
    24 }

    第二遍:

    有if-else语句来代替switch,基本思想一样

     1 public class Solution {
     2     public int evalRPN(String[] tokens) {
     3         if(tokens == null || tokens.length == 0) return 0;
     4         LinkedList<Integer> stack = new LinkedList<Integer>();
     5         for(int i = 0; i < tokens.length; i++){
     6             if("+".equals(tokens[i])){
     7                 int tem = stack.pop();
     8                 stack.push(stack.pop() + tem);
     9             }else if("-".equals(tokens[i])){
    10                 int tem = stack.pop();
    11                 stack.push(stack.pop() - tem);
    12             }else if("*".equals(tokens[i])){
    13                 int tem = stack.pop();
    14                 stack.push(stack.pop() * tem);
    15             }else if("/".equals(tokens[i])){
    16                 int tem = stack.pop();
    17                 stack.push(stack.pop() / tem);
    18             }else{
    19                 stack.push(Integer.valueOf(tokens[i]));
    20             }
    21         }
    22         return stack.pop();
    23     }
    24 }
    View Code
  • 相关阅读:
    【HackerRank】Sherlock and MiniMax
    【HackerRank】Game Of Rotation
    【HackerRank】Bus Station
    【HackerRank】 有洞的地图
    【HackerRank】Sherlock and Array
    【HackerRank】QuickSort(稳定快排,空间复杂度O(n))
    【HackerRank】 The Full Counting Sort
    51获取6050原始数据并通过匿名上位机显示波形
    51单片机之IIC通信原理及软件仿真
    寻迹小车开发日记
  • 原文地址:https://www.cnblogs.com/huntfor/p/3891676.html
Copyright © 2011-2022 走看看