彻底大悟!逆波兰表达式求值(150)

简介: 彻底大悟!逆波兰表达式求值(150)
class Solution {
public int evalRPN(String[] tokens) {
Stack stack = new Stack<>(); // 创建一个整型栈用于存放操作数
    for (int i = 0; i < tokens.length; i++) {
        switch (tokens[i]) {
            case "+": // 加法运算
                int num1 = stack.pop();
                int num2 = stack.pop();
                stack.push(num2 + num1); // 将计算结果压入栈中
                break;
            case "-": // 减法运算
                num1 = stack.pop();
                num2 = stack.pop();
                stack.push(num2 - num1);
                break;
            case "*": // 乘法运算
                num1 = stack.pop();
                num2 = stack.pop();
                stack.push(num2 * num1);
                break;
            case "/": // 除法运算
                num1 = stack.pop();
                num2 = stack.pop();
                stack.push(num2 / num1);
                break;
            default: // 如果是数字,则将其转换为整数并压入栈中
                stack.push(Integer.valueOf(tokens[i]));
                break;
        }
    }

    return stack.pop(); // 返回栈中最终的计算结果
}

}

// 对于表达式[“4”,“13”,“5”,“/”,“+”] 看到好多人不懂,这里给大家耐心解释一下哇

/**

表达式是[“4”,“13”,“5”,“/”,“+”],它表示的数学表达式是:4 + (13 / 5)。


现在让我们来逐步分析代码是如何处理这个表达式的:


开始时,numStack 栈是空的。


遍历表达式数组:


第一个元素是 “4”,它不是运算符,因此执行 default 分支,将整数 4 压入 numStack,此时栈内元素为 [4]。


下一个元素是 “13”,同样不是运算符,执行 default 分支,将整数 13 压入 numStack,此时栈内元素为 [4, 13]。


接下来是 “5”,同样执行 default 分支,将整数 5 压入 numStack,此时栈内元素为 [4, 13, 5]。

然后是 “/”,它是一个运算符,因此执行 case “/” 分支,从栈顶依次弹出两个操作数,即 5 和 13,计算 13 / 5 的结果得到 2,然后将结果 2 压入栈中,此时栈内元素为 [4, 2]。


最后是 “+”,同样是一个运算符,执行 case “+” 分支,从栈顶依次弹出两个操作数,即 2 和 4,计算 4 + 2 的结果得到 6,然后将结果 6 压入栈中,此时栈内元素为 [6]。


遍历完整个表达式数组后,栈中只剩下一个元素,即最终的结果。因此,numStack.pop() 返回的是计算结果 6。

*/


相关文章
【逆波兰表达式求值】
【逆波兰表达式求值】
10_逆波兰表达式求值
10_逆波兰表达式求值
|
3月前
【LeetCode 25】150.逆波兰表达式求值
【LeetCode 25】150.逆波兰表达式求值
17 0
|
5月前
|
算法
【算法】栈算法——逆波兰表达式求值
【算法】栈算法——逆波兰表达式求值
|
8月前
|
Java C++ Python
acwing 3302. 表达式求值
acwing 3302. 表达式求值
|
8月前
逆波兰表达式求值
逆波兰表达式求值
78 1
|
8月前
|
Java C++ Python
leetcode-150:逆波兰表达式求值
leetcode-150:逆波兰表达式求值
53 0
|
8月前
|
NoSQL 容器 消息中间件
栈和队列及表达式求值问题
栈和队列及表达式求值问题
LeetCode 150 逆波兰表达式求值
构造一个栈,遇到运算符就弹出进行运算
leetcode150–逆波兰表达式求值(栈/后缀表达式)
leetcode150–逆波兰表达式求值(栈/后缀表达式)