题目原型:
Evaluate the value of an arithmetic expression in Reverse Polish Notation.
Valid operators are +
, -
, *
, /
.
Each operand may be an integer or another expression.
Some examples:
["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6
基本思路:
题目的意思是求逆波兰序列的值。自然而然的想到了利用栈来存放数字,辅以符号进行计算。
public int evalRPN(String[] tokens) { int ret = 0; Stack<Integer> value = new Stack<Integer>(); int index = 0; while(index<tokens.length) { //分两种情况,如果字符串长度为1,只有可能是运算符和不带符号的数字 //如果长度大于1,那么肯定是带符号的数字 if(tokens[index].length()==1) { char tmpch = tokens[index].charAt(0); if(tmpch>=‘0‘&&tmpch<=‘9‘) { value.push(tmpch-‘0‘); } else { if(value.size()<2) { return -1; } else { int one = value.pop(); int two = value.pop(); if(tmpch==‘+‘) ret = two+one; else if(tmpch==‘-‘) ret = two-one; else if(tmpch==‘*‘) ret = two*one; else { if(one==0) return -1; else ret = two/one; } } value.push(ret); } } else value.push(Integer.parseInt(tokens[index])); index++; } if(value.size()>1||value.size()<=0) return -1; return value.peek(); }
Evaluate Reverse Polish Notation,布布扣,bubuko.com
Evaluate Reverse Polish Notation
原文:http://blog.csdn.net/cow__sky/article/details/21782345