LeetCode 0150 Evaluate Reverse Polish Notation
作者:互联网
1. 题目描述
2. Solution 1
1、思路分析
遍历tokens中的字符,设工作变量是token,若token是数字则直接入栈,若是运算符,则弹出两个操作数,并根据运算符进行运算,之后将计算结果入栈。直到遍历完成,最后返回栈顶元素。
2、代码实现
package Q0199.Q0150EvaluateReversePolishNotation;
import java.util.Deque;
import java.util.LinkedList;
/*
method 1: 栈
*/
public class Solution1 {
public int evalRPN(String[] tokens) {
Deque<Integer> stack = new LinkedList<>();
for (String token : tokens) {
if (isNumber(token)) stack.push(Integer.parseInt(token));
else {
int num2 = stack.pop();
int num1 = stack.pop();
switch (token) {
case "+":
stack.push(num1 + num2);
break;
case "-":
stack.push(num1 - num2);
break;
case "*":
stack.push(num1 * num2);
break;
case "/":
stack.push(num1 / num2);
break;
}
}
}
return stack.pop();
}
public boolean isNumber(String token) {
return !("+".equals(token) || "-".equals(token) || "*".equals(token) || "/".equals(token));
}
}
3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(n)
3. Solution 2
1、思路分析
使用数组代替栈
2、代码实现
package Q0199.Q0150EvaluateReversePolishNotation;
/*
用数组代替栈
*/
class Solution2 {
boolean isOp(String str) {
if (str.length() != 1) return false;
char ch = str.charAt(0);
return ch == '+' || ch == '*' || ch == '-' || ch == '/';
}
int calc(String op, int v2, int v1) {
switch(op.charAt(0)) {
case '+' : return v1 + v2;
case '-' : return v1 - v2;
case '*' : return v1 * v2;
case '/' : return v1 / v2;
}
return 0;
}
public int evalRPN(String[] tokens) {
int[] s = new int[tokens.length];
int i = 0;
for (String token : tokens) {
if (isOp(token)) {
int v2 = s[--i];
int v1 = s[--i];
s[i++] = calc(token, v2, v1);
} else {
s[i++] = Integer.parseInt(token);
}
}
return s[0];
}
}
3、复杂度分析
时间复杂度: O(n)
空间复杂度: O(1)
标签:case,return,Reverse,Notation,int,Evaluate,token,stack,String 来源: https://www.cnblogs.com/junstat/p/16304123.html