题解 | #牛的表达式计算器#
牛的表达式计算器
https://www.nowcoder.com/practice/261e7f01438f414c92f59c0059d3a906?tpId=354&tqId=10590515&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param tokens string字符串一维数组 * @return int整型 */ public int calculatePostfix (String[] tokens) { Deque<Integer> stack = new ArrayDeque<>(); for (String token : tokens) { Integer result = 0; if (token.equals("+")) { result = stack.pop() + stack.pop(); } else if (token.equals("-")) { int digit = stack.pop(); result = stack.pop() - digit; } else if (token.equals("*")) { result = stack.pop() * stack.pop(); } else if (token.equals("/")) { int digit = stack.pop(); result = stack.pop() / digit; } else { result = Integer.parseInt(token); } stack.push(result); } return stack.peek(); } }
本题知识点分析:
1.栈的特点:先进后出
2.掌握出栈和入栈
3.掌握字符串转数字
本题解题思路:
1.创建一个双向队列ArrayDeque,当然你用stack也是一样的,双向队列在用作栈时,性能优于Stack,用于队列,优于LinkedList,
当然如果有线程安全情况,用JUC下面的类即可
2.遍历tokens字符串数组
3.当遇到运算符号+、-、*、/、进行出栈,要注意减号和除号的出栈顺序,因为减号和除号不能前后顺序相反会导致结果不同,加号和乘号则没有这个问题
4.如果遇到其他,也就是数字字符串,例如:"3",那么就转化以后进行入栈
5.最后返回栈顶元素即可
本题使用编程语言:Java
高频面试算法题解 文章被收录于专栏
高频面试算法题解,每天一小步,人生一大步,跟着一起刷起来!