题150

题目

根据逆波兰表示法,求表达式的值。
有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。
说明:
整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。

c#

思路

本题是直接参考的解析,并自己理解清楚的。本题利用while循环,来处理给定数组中元素是运算符还是数字,利用int.TryParse()语句,该语句的用法如下:

int y=0;
 
int Num;
 
if(int .TryParse("9",out y))
 
{
 
      Num=y;//如果"9"不能转化为int类型,if里的表达式为false,如果转化成功就赋给变量y;  然后我们就可以无限次使用y帮我们取值啦,(*^__^*) 嘻嘻……  int.TryParse的最大好处是再也不用担心类型转化时报错了;
 
}
 
 
//除了int.TryParse(),相信大家已经想到了 ,同理,还有 decimal.TryParse() 等等;

在每一次循环中得到一个运算符,并将距离该运算符最近的两个数字元素存储到栈中,并直接对其进行运算,然后处理过的数据及运算符就直接出栈,最后返回得到最终的运算结果。

public class Solution {
    public int EvalRPN(string[] tokens) {
    Stack<int> stack=new Stack<int>();
     int i=0;
     while(i<tokens.Length)
     {
      int temp=0;
      if(int.TryParse(tokens[i],out temp))//判断给定的数组元素中读取的此时的元素是否为int类型,如果是就将其值传递给中间变量temp,否则结果为false
      {
          stack.Push(temp);//把int类型的元素插入建立的栈中
      }
      else
      {
        var value2=stack.Pop();
        var value1=stack.Pop();
        if(tokens[i]=="+")
        {
            stack.Push(value1+value2);
        }
        else if(tokens[i]=="-")
        {
            stack.Push(value1-value2);
        }
        else if(tokens[i]=="*")
        {
            stack.Push(value1*value2);
        }
        else if(tokens[i]=="/")
        {
          stack.Push(value1/value2);
        }
    }
       i++;
     }
     return stack.Pop();
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值