计算逆波兰式 (Evaluate Reverse Polish Notation)

这个题目比较容易,很像编译原理,所以很容易的一遍A过。

题目:

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
解题思路:

使用栈的思想,每次遇到数字压入顶端,遇到符号时弹出顶端的两个数字计算,并将结果再次压回栈中,最终栈里只有结果值。

代码:

 int evalRPN(vector<string> &tokens) {
        int i_stack[100];
        int i_top = 0;
        string s_now;
       for(int i = 0; i < tokens.size(); i++)
      {

    s_now = tokens[i];

    if(s_now.compare("+") != 0 && s_now.compare("-") != 0  && s_now.compare("*") != 0 && s_now.compare("/") != 0)

    {

    i_stack[i_top++] = atoi(s_now.c_str());

    }

    else //符号操作

    {

    i_top--;

    if(s_now.compare("+") == 0)  //没写{}

    i_stack[i_top - 1] = i_stack[i_top] + i_stack[i_top - 1];

    else if(s_now.compare("-") == 0)

    i_stack[i_top - 1] = i_stack[i_top - 1] - i_stack[i_top];

    else if(s_now.compare("*") == 0)

    i_stack[i_top - 1] = i_stack[i_top] * i_stack[i_top - 1];

    else 

    i_stack[i_top - 1] = i_stack[i_top - 1] / i_stack[i_top]; //没有判断为0的状况

    }

        }
        return i_stack[0];
    }

说明:

1.代码没有进行健壮性的考虑,没有处理非正确的逆波兰式的输入,没有对0的除法进行处理。

2.使用静态数组实现简单的栈功能,比使用C++本身的栈更直接。

3.RunTime 8ms

感受:一直知道自己很菜,但是由于写过简单编译器可能看到token就知道基本处理,而且编译原理课上也真的有讲过~

  认真听课还是有好处滴~嘻嘻             水水的过了还是蛮开心的!继续加油!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值