这个太简单了,用一个栈搞定。
不过很久没有写代码,忘记了一些java的基础,比如switch语句忘了写break,还有就是栈元素的类型,最好在声明变量的时候就设置成Integer,否在在pop的时候操作转换特别麻烦,还有就是String转化成数字,要循环一下,特别是遇到负数的时候,要倒过来循环~都是很弱智的东西,不过记录一下方便自己以后看。题目本身没有什么意思,就是要熟悉java的栈和String和char数组还有integer之间的转换方法,不可乱用。
import java.util.Stack;
public class evalRPN {
public static int evalRPN(String[] tokens) {
Stack<Integer> stack = new Stack<Integer>();
if(tokens.length == 1) return Integer.parseInt(tokens[0]);
for(String c : tokens){
char[] s = c.toCharArray();
if(s[0] >= 48 && s[0]<= 57){
int k = 0;
for(int i=0 ;i<=s.length-1;i++)
{
k = (int) (k+ (int)(s[i]-48)*Math.pow(10,s.length-i-1));
}
stack.push(k);
}else if(s[0] == '-' && s.length>1 && s[1] >=48 && s[1] <= 57){
int k = 0;
for(int i=s.length-1;i>0;i--)
{
k = (int) (k+ (int)(s[i]-48)*Math.pow(10,s.length-i-1));
}
stack.push(-k);
}else{
int a,b;
a = stack.pop();
b = stack.pop();
switch(s[0]){
case '+' : {
stack.push(a+b);
break;
}
case '-' : {
stack.push(b-a);
break;
}
case '*' : {
stack.push(a*b);
break;
}
case '/' : {
stack.push(b/a);
break;
}
}
}
}
int result = stack.pop();
return result;
}
public static void main(String args[]){
String[] tokens = {"-4","13","5","/","+"};
int re = evalRPN(tokens);
System.out.print(re);
}
}