提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目概述
Leetcode学习记录,栈,逆波兰表达式。
https://leetcode-cn.com/leetbook/read/queue-stack/gomvm/
一、题目分析
通过观察示例,可以看出,每遇到一个运算符,就把运算符前面的两个数字拿出来做运算,再把结果存回数列。
我们需要建一个存数字的栈,运算符就从tokens这个String数组里读取就好。由于数字也是通过tokens读取的,但是我们的栈是整数栈,所以我们入栈的时候需要类型转换。这道题还是比较简单的。
二、作业记录
1.作业代码
代码如下:
class Solution {
public int evalRPN(String[] tokens) {
Deque<Integer> numStack = new LinkedList<Integer>();
int n = tokens.length;
int num1, num2, result;
for( int i = 0; i < n; i ++ ){
if( tokens[i].equals( "+" )) {
num1 = numStack.pop();
num2 = numStack.pop();
numStack.push( num1 + num2 );
}else
if( tokens[i].equals( "-" )){
num1 = numStack.pop();
num2 = numStack.pop();
numStack.push( num2 - num1 );
}else
if( tokens[i].equals( "*" )){
num1 = numStack.pop();
num2 = numStack.pop();
numStack.push( num2 * num1 );
}else
if( tokens[i].equals( "/" )){
num1 = numStack.pop();
num2 = numStack.pop();
numStack.push( num2 / num1 );
}else{
numStack.push( Integer.valueOf( tokens[i]) );
}
}
return numStack.pop();
}
}
2.作业表现
表现如下:
妥妥的普通人的解法,执行用时分布刚好就是钟形曲线的中线啊。然而我也暂时想不出更好的解法。
复杂度分析
时间复杂度: 遍历tokens数组,时间复杂度O(n)
空间复杂度:用栈存储了运算数,我个人觉得应该是近似O(2/3 n),不考虑常数是O(n)吧.