leetcode--150--逆波兰表达式求值

题目:
根据逆波兰表示法,求表达式的值。

有效的运算符包括 +, -, *, / 。每个运算对象可以是整数,也可以是另一个逆波兰表达式。

说明:

整数除法只保留整数部分。
给定逆波兰表达式总是有效的。换句话说,表达式总会得出有效数值且不存在除数为 0 的情况。
示例 1:

输入: ["2", "1", "+", "3", "*"]
输出: 9
解释: ((2 + 1) * 3) = 9

示例 2:

输入: ["4", "13", "5", "/", "+"]
输出: 6
解释: (4 + (13 / 5)) = 6

示例 3:

输入: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
输出: 22
解释: 
  ((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22

链接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation

思路:
1、使用一个列表来存储输入的元素,如果当前元素是数字则将当前元素放入列表。如果当前元素是运算符,则将列表pop出两个元素进行操作符运算并将运算结果放入列表中

Python代码:

class Solution(object):
    def evalRPN(self, tokens):
        """
        :type tokens: List[str]
        :rtype: int
        """
        ls = []

        for item in tokens:
            if (item in ('+','-','*','/')):
                second = ls.pop()
                first = ls.pop()
                if item == '+':
                    ans = first + second
                if item == '-':
                    ans =  first-second
                if item == '*':
                    ans = first * second
                if item == '/':
                    ans = int(first*1.0/second)
                ls.append(ans)
            else:
                ls.append(int(item))
        return ls[-1]

C++代码:

#include <math.h>
#include <string>

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        vector<int> ls;

        for (auto item : tokens){
            if (item=="+" || item=="-" || item=="*" || item=="/"){
                int second = ls.back();
                ls.pop_back();
                int first = ls.back();
                ls.pop_back();
                int ans;
                if(item=="+")  ans = first+second;
                if(item=="-") ans = first-second;
                if(item=="*") ans = first*second;
                if(item=="/") ans = (int)(first*1.0/second);
                ls.push_back(ans);
            }else{
                ls.push_back(stoi(item));
            }
        }
        return ls.back();
    }
};
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容