2024.1.22(150. 逆波兰表达式求值)

2024.1.22(150. 逆波兰表达式求值)
2024.1.22(150. 逆波兰表达式求值)_第1张图片
2024.1.22(150. 逆波兰表达式求值)_第2张图片
2024.1.22(150. 逆波兰表达式求值)_第3张图片

相信看完动画大家应该知道,这和1047. 删除字符串中的所有相邻重复项是差不错的,只不过本题不要相邻元素做消除了,而是做运算!
2024.1.22(150. 逆波兰表达式求值)_第4张图片
// 定义一个Solution类
class Solution {
// 定义一个公共方法evalRPN,用于计算逆波兰表示法的表达式的值
public int evalRPN(String[] tokens) {
Deque stack = new LinkedList<>(); // 创建一个双端队列来模拟栈操作

    // 遍历tokens数组中的每个元素  
    for (String s : tokens) {  
        // 如果当前元素是"+",则从栈中弹出两个元素并相加,然后将结果推回栈中  
        if ("+".equals(s)) {  // 注意:由于LeetCode环境内置的JDK版本问题,不能使用==来判断字符串是否相等  
            stack.push(stack.pop() + stack.pop());  // 注意:这里的-和/需要特殊处理  
        // 如果当前元素是"-",则从栈中弹出两个元素并相减,然后将结果推回栈中  
        } else if ("-".equals(s)) {  
            stack.push(-stack.pop() + stack.pop());  
        // 如果当前元素是"*",则从栈中弹出两个元素并相乘,然后将结果推回栈中  
        } else if ("*".equals(s)) {  
            stack.push(stack.pop() * stack.pop());  
        // 如果当前元素是"/",则从栈中弹出两个元素并相除,然后将结果推回栈中  
        } else if ("/".equals(s)) {  
            int temp1 = stack.pop();  // 弹出第二个元素作为除数  
            int temp2 = stack.pop();  // 弹出第一个元素作为被除数  
            stack.push(temp2 / temp1);  // 将结果推回栈中  
        // 如果当前元素不是运算符,则将其转换为整数并推入栈中  
        } else {  
            stack.push(Integer.valueOf(s));  // 将字符串转换为整数并推入栈中  
        }  
    }  
    // 返回栈顶的元素,即整个表达式的计算结果  
    return stack.pop();  
}  

}
这段代码使用一个双端队列(Deque)来模拟栈操作。它遍历输入的tokens数组中的每个元素,根据元素的类型执行相应的操作。如果元素是运算符,则从栈中弹出两个元素进行相应的运算;如果元素是数字,则将其转换为整数并推入栈中。最后,返回栈顶的元素作为整个表达式的计算结果。
2024.1.22(150. 逆波兰表达式求值)_第5张图片

你可能感兴趣的:(java,数据结构,算法)