Leetcode150.逆波蘭表示式求值
阿新 • • 發佈:2020-08-13
題意
逆波蘭表示式求值,題目保證輸入的逆波蘭表示式是有效可解的
思路
- 表示式求值是棧的經典應用,可以說是很熟悉了。和算數式->逆波蘭表示式相比,這個求值可以說是小兒科
- 主要思路就是——構造一個棧用來存放運算數,當遇到操作符的時候出棧2個運算數,進行相應的運算,算完之後將結果壓入棧中,如此往復直到處理完
- 注意⚠️
- 要處理好'-'號和負數的判斷,我這裡是通過首字元和長度來判斷的
- 先後出棧的元素分別是表示式
a ? b
的b
和a
- 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(); } };