#算法#队列#栈#leetcode
今天有三道题,后面两道题按照要求可以不做,但是得了解KMP算法。目前先解决第一道题,后面会补充后面两道题。
150. 逆波兰表达式求值
题目链接:150. 逆波兰表达式求值 - 力扣(LeetCode)给你一个字符串数组 tokens
,表示一个根据 逆波兰表示法 表示的算术表达式。
不了解逆波兰表达式的朋友可以先学习下,这个还是很有意思的。
思路:创建一个栈存储数字和结果,遍历字符串然,数字的话就入栈,运算符的话,取出栈顶的前两个元素进行运算,将运算结果再入栈,最终栈里面只有一个结果,出栈即可。
具体代码:
public int evalRPN(String[] tokens) {
if(null == tokens) {
return 0;
}
Deque<Integer> q = new ArrayDeque<>();
for(String s : tokens) {
if(s.equals("+")) {
q.push(q.pop() + q.pop());
} else if(s.equals("-")) {
int subtrahend = q.pop();
int minuend = q.pop();
q.push(minuend - subtrahend);
} else if(s.equals("*")) {
q.push(q.pop() * q.pop());
} else if(s.equals("/")) {
int divisor = q.pop();
int dividend = q.pop();
q.push(dividend / divisor);
}else {
q.push(Integer.parseInt(s));
}
}
return q.pop();
}
这里需要注意,因为减法和除法有顺序要求,需要处理下。
KMP算法
未完待续!