leetcode150:逆波兰表达式求值

package com.mxnet;

import java.util.Stack;

public class Solution150 {

    public static void main(String[] args) {

    }

    /**
     * 根据 逆波兰表示法,求表达式的值。
     *
     * 有效的算符包括+、-、*、/。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
     *
     * 注意个整数之间的除法只保留整数部分。
     *
     * 可以保证给定的逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
     * @param tokens
     * @return
     * 思路
     * 1. 使用栈结构保存所有数字
     * 2. 依次遍历所有元素,如果是元素符,则从栈中弹出元素进行运算
     * 3. 如果是数字则入栈
     * 4. 最后计算的结构将保存在栈顶
     */
    public int evalRPN(String[] tokens) {
        int res = 0;
        //定义栈保存数字
        Stack<Integer> numStack = new Stack<>();
        //遍历每个元素并进行判断执行
        for (String token : tokens) {
            if (token.equals("+")){
                int num1 = numStack.pop();
                int num2 = numStack.pop();
                res = num1 + num2;
                numStack.add(res);
            }else if (token.equals("-")){
                int num1 = numStack.pop();
                int num2 = numStack.pop();
                res = num2 - num1;
                numStack.add(res);
            }else if (token.equals("*")){
                int num1 = numStack.pop();
                int num2 = numStack.pop();
                res = num1 * num2;
                numStack.add(res);
            }else if (token.equals("/")){
                int num1 = numStack.pop();
                int num2 = numStack.pop();
                res = num2 / num1;
                numStack.add(res);
            }else {
                numStack.add(Integer.parseInt(token));
            }
        }
        return numStack.pop();
    }
}
posted @ 2022-08-24 21:04  mx_info  阅读(20)  评论(0)    收藏  举报