Leetcode || Evaluate Reverse Polish Notation

来源:互联网 发布:目前最好的淘宝客程序 编辑:程序博客网 时间:2024/06/06 03:38

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

package cc.stack.application;import java.util.Stack;class Solution {    public int evalRPN(String[] tokens) {        if(tokens == null || tokens.length == 0)            return 0;        Stack<Integer> stack = new Stack<Integer>();        for(int i=0; i<tokens.length; i++) {            if(tokens[i].matches("\\d+") || tokens[i].matches("-\\d+"))                stack.push(Integer.valueOf(tokens[i]));            else if(tokens[i].equals("+") || tokens[i].equals("-")                     || tokens[i].equals("*") || tokens[i].equals("/")) {                int stack_a = 0;                int stack_b = 0;                int c = 0;                if(!stack.isEmpty()) {                    stack_a = stack.pop();                } else {                    return 0;                }                if(!stack.isEmpty()) {                    stack_b = stack.pop();                } else {                    return 0;                }                if(tokens[i].equals("+"))                    c = stack_b + stack_a;                else if(tokens[i].equals("-"))                    c = stack_b - stack_a;                else if(tokens[i].equals("*"))                    c = stack_b * stack_a;                else if(tokens[i].equals("/"))                    c = stack_b / stack_a;                stack.push(c);            }        }        if(!stack.empty())            return stack.pop();        else            return 0;    }}public class Main1 {    public static void main(String[] args) {        Solution s = new Solution();        String[] tokens = {"18"};        System.out.println(s.evalRPN(tokens));    }}
0 0