1. 程式人生 > 實用技巧 >Leetcode150.逆波蘭表示式求值

Leetcode150.逆波蘭表示式求值

題意

逆波蘭表示式求值,題目保證輸入的逆波蘭表示式是有效可解的

思路

  • 表示式求值是棧的經典應用,可以說是很熟悉了。和算數式->逆波蘭表示式相比,這個求值可以說是小兒科
  • 主要思路就是——構造一個棧用來存放運算數,當遇到操作符的時候出棧2個運算數,進行相應的運算,算完之後將結果壓入棧中,如此往復直到處理完
  • 注意⚠️
    • 要處理好'-'號和負數的判斷,我這裡是通過首字元和長度來判斷的
    • 先後出棧的元素分別是表示式a ? bba
    • C++中可以使用std::stoi(string s)來將string轉化為int型別的數

程式碼

class Solution {
public:
    int calculate(int x, int y, char op)
    {
        switch(op){
            case '+':   return x + y;
            case '-':   return x - y;
            case '/':   return x / y;
            case '*':   return x * y;
        }
        return 1;    //表示執行成功,實際執行不會執行到這裡
    }
    int evalRPN(vector<string>& tokens) {
        stack<int> nums;
        for(auto token: tokens)
        {
            if(token[0] == '+' || token[0] == '/' || token[0] == '*' ||  token[0] == '-' && token.size() == 1 )
            {
                auto right = nums.top();
                nums.pop();
                auto left = nums.top();
                nums.pop();
                int val = calculate(left, right, token[0]);
                nums.push(val);
            }else   
                nums.push(stoi(token));
        }
        return nums.top();
    }
};