描述:
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
思路:
1.就像题目所描述的,计算逆波兰数学表达式的结果,循环访问字符串数组类型的表达式
2.遍历的字符是数字,将数字进栈,是数学符号的时,将连续的两个数字出栈并计算出结果,然后将结果再入栈
3.重复步骤2直至所有的数组元素被访问完毕。
代码:
//代码通俗易懂,略冗余。
public int evalRPN(String[] tokens) {
if(tokens==null||tokens.length==0)
return 0;
if(tokens.length==1)
return Integer.parseInt(tokens[0]);
int parseNum=0;
int num1=0,num2=0;
Stack<Integer>st=new Stack<Integer>();
for(int i=0;i<tokens.length;i++)//iterate the item of the array
{
if(isOperator(tokens[i]))//if the item is operator,caculate the numbers
{
num2=st.peek();
st.pop();
num1=st.peek();
st.pop();
parseNum=evaluteNums(num1,num2,tokens[i]);
if(i+1==tokens.length)
return parseNum;
st.push(parseNum);
}else {
st.push(Integer.parseInt(tokens[i]));//if the item is number,push to the stack
}
}
return parseNum;
}
public int evaluteNums(int num1,int num2,String operator)
{
if(operator.equals("+"))
return num1+num2;
else if(operator.equals("-"))
return num1-num2;
else if(operator.equals("*"))
return num1*num2;
else
return num1/num2;
}
public boolean isOperator(String str)
{
char operator=str.charAt(0);
if(operator=='+'||operator=='-'||operator=='*'||operator=='/')
{
if(str.length()==1)
return true;
}
return false;
}版权声明:本文为博主原创文章,未经博主允许不得转载。
leetcode_Evaluate Reverse Polish Notation
原文:http://blog.csdn.net/mnmlist/article/details/47321475