题目:
第一次写的时候想着用try catch,用一个数组将可以转换为int类型的放入数组,转换不了进入catch计算,具体代码如下:
public class Solution {
int sum=0;
int i=0;
public int EvalRPN(string[] tokens) {
int []nums=new int [tokens.Length];
for(;;)
{try
{
for(;i<tokens.Length-1;i++)
nums[i]=Convert.ToInt32(tokens[i]);
}
catch
{
for(int n=0;n<i-2;i++)
nums[n+2]=nums[n];
switch(tokens[i])
{
case "+":
nums[i]=nums[i-1]+nums[i-2];
break;
case "-":
nums[i]=nums[i-2]/nums[i-1];
break;
case "*":
nums[i]=nums[i-2]*nums[i-1];
break;
case "/":
nums[i]=nums[i-2]/nums[i-1];
break;
}
if(i<tokens.Length-1)
continue;
return nums[i];
}
} }
}
用的for循环太多了,时间复杂度非常高,想到可以用栈来替代数组实现这个操作,具体代码为:
public class Solution {
public int EvalRPN(string[] tokens) {
int a;
int b;
if(tokens==null||tokens.Length==0)
return 0;
Stack<int> stack=new Stack<int>();
for(int i=0;i<tokens.Length;i++)
{
if(tokens[i]!="+"&&tokens[i]!="-"&&tokens[i]!="*"&&tokens[i]!="/")
stack.Push(Convert.ToInt32(tokens[i]));
else
{a=stack.Pop();
b=stack.Pop();
switch(tokens[i])
{
case "+":
stack.Push(a+b);
break;
case "-":
stack.Push(b-a);
break;
case "*":
stack.Push(b*a);
break;
case "/":
stack.Push(b/a);
break;
}
}
}return stack.Pop();
}}
运行结果为: