题目150 逆波兰表达式
逆波兰表达式求值。给定一个数组,表示一个逆波兰表达式。求其值。
如:[ “2”,“1”,“+”,“3”,“*” ],表示 (2+1)*3 = 9
如:[ “4”,“13”, “5”, “/” , “+” ],表示4+(13/5) = 6
思路
遍历数组{
如果元素是数字(包括负数),入栈
如果是运算符,就出栈两个数字,计算完成后接着入栈
}
其实这个题思路很简单,主要是判断数字的时候,要考虑用正则表达式,会方便很多。
下面是代码:
class Solution {
public static int evalRPN(String[] tokens) {
Stack stack = new Stack();
String regex = "-[0-9]+(.[0-9]+)?|[0-9]+(.[0-9]+)?";
for(int i = 0;i < tokens.length ; i++){
//是数字,包括负数
if(tokens[i].matches(regex)){
stack.push(tokens[i]);
}else{ //是运算符
Integer b = Integer.parseInt((String)stack.pop());
Integer a = Integer.parseInt((String)stack.pop());
Integer c = 0;
if(tokens[i].charAt(0) == '+')
c = a + b;
if(tokens[i].charAt(0) == '-')
c = a - b;
if(tokens[i].charAt(0) == '*')
c = a * b;
if(tokens[i].charAt(0) == '/')
c = a / b;
stack.push(c.toString());
}
}
int res = Integer.parseInt((String)stack.pop());;
return res;
}
}