leetcode解题系列:计算算式 - Go语言中文社区

leetcode解题系列:计算算式


Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, *, /. Each operand may be an integer or another expression. For example:

  ["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
  ["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

This problem can be solved by using a stack. We can loop through each element in the given array. When it is a number, push it to the stack. When it is an operator, pop two numbers from the stack, do the calculation, and push back the result.

Evaluate Reverse Polish Notation

代码

package array.rotateArray;

import java.util.Stack;

/**
 * Created by wzy on 15-7-23.
 */
public class Solution {

    public static int compute(String array[]) throws Exception {
        String ops[] = {"+", "-", "*", "/"};
        Stack stack = new Stack();

        for (String arr : array) {


            boolean isOP = false;
            for (String op : ops) {
                if (arr.contains(op)) {
                    isOP = true;
                    break;
                }
            }

            if(isOP) {
                int value1 = Integer.parseInt(stack.pop());
                int value2 = Integer.parseInt(stack.pop());
                int result = 0;
                if (arr.equals("+")) {
                    result = value2 + value1;
                } else if (arr.equals("-")) {
                    result = value2 - value1;

                } else if (arr.equals("*")) {
                    result = value2 * value1;

                } else if (arr.equals("/")) {
                    result = value2 / value1;
                }
                stack.push(String.valueOf(result));
            } else {
                stack.push(arr);
            }
        }


        return Integer.parseInt(stack.pop());
    }

    public static void main(String args[]) {
        try {
            String array[] = {"2", "1", "+", "3", "*"};
            System.out.println(compute(array));
        } catch (Exception e) {
            throw new IllegalArgumentException();
        }

    }
}


版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u012998254/article/details/47020169
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 01:12:02
  • 阅读 ( 1396 )
  • 分类:算法

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢