写点什么

【LeetCode】逆波兰表达式求值 Java 题解

用户头像
HQ数字卡
关注
发布于: 2021 年 03 月 20 日

题目

根据 逆波兰表示法,求表达式的值。


有效的算符包括 +、-、*、/ 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。


示例:


输入:tokens = ["4","13","5","/","+"]


输出:6


解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6


代码


public class DayCode {    public static void main(String[] args) {        String[] s = {"3", "11", "5", "+", "-"};        int ans = new DayCode().evalRPN(s);        System.out.println(ans);    }
/** * 链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation/ * 时间复杂度 O(n) * 空间复杂度 O(n) * @param tokens * @return */ public int evalRPN(String[] tokens) { int ans = 0; Deque<Integer> stack = new LinkedList<>(); for (String token : tokens) { int temp = 0; int num1 = 0; int num2 = 0; switch (token) { case "+": temp = stack.removeLast() + stack.removeLast(); stack.addLast(temp); break; case "-": num1 = stack.removeLast(); num2 = stack.removeLast(); stack.addLast(num2 - num1); break; case "*": temp = stack.removeLast() * stack.removeLast(); stack.addLast(temp); break; case "/": num1 = stack.removeLast(); num2 = stack.removeLast(); stack.addLast(num2 / num1); break; default: stack.addLast(Integer.parseInt(token)); break; } } if (!stack.isEmpty()) { ans = stack.pop(); } return ans; }}
复制代码


总结

  • 今天的每日一题是栈的应用,这个题目的难点是理解题意,理解题意之后,我们可以从容解决。

  • 本题主要利用了栈先入后出的性质,栈还可以用来解决简单计算器等题目。

  • 坚持每日一题,加油!


发布于: 2021 年 03 月 20 日阅读数: 10
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

LeetCode,略懂后端的RD

评论

发布
暂无评论
【LeetCode】逆波兰表达式求值Java题解