题目:
根据逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
思路:
运用栈,将输入的字符串从头依次放入栈中。
每当检测到将存入栈中的字符为非数字,则提取出栈中的前两个数,运算后将新数存入栈中。
最后返回栈顶元素。
public class Solution {
public int EvalRPN(string[] tokens) {
Stack<int > K1=new Stack<int >();
// Stack<int> K2=new Stack<int>();
for(int i=0;i<tokens.Length;i++)
{
int t=0;
if(int.TryParse(tokens[i],out t))
{
K1.Push(t);
}
else
{
//K1.Push(tokens[i]);
Operation(K1,tokens,i);
}
}
return K1.Pop();
}
public void Operation(Stack<int> K,string[] tokens1,int i)
{
switch (tokens1[i])
{
case "+":
{
int a=K.Pop();
int b=K.Pop();
K.Push(a+b);
break;
}
case "*":
{
int a=K.Pop();
int b=K.Pop();
K.Push(a*b);
break;
}
case "-":
{
int a=K.Pop();
int b=K.Pop();
K.Push(b-a);
break;
}
case "/":
{
int a=K.Pop();
int b=K.Pop();
K.Push(b/a);
break;
}
default:
{
//K.Pop();
break;
}
}
}
}