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 @   mx_info  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示