lintcode-424-逆波蘭表達式求值


424-逆波蘭表達式求值

求逆波蘭表達式的值。
在逆波蘭表達法中,其有效的運算符號包括 +, -, *, / 。每個運算對象可以是整數,也可以是另一個逆波蘭計數表達。

樣例

["2", "1", "+", "3", "*"] -> ((2 + 1) * 3) -> 9
["4", "13", "5", "/", "+"] -> (4 + (13 / 5)) -> 6

標簽

領英 棧

思路

  • 利用棧,首先遍歷字符串數組,若遇到操作數,如 "1","23" 等,則將其轉化為整數並入棧
  • 若遇到操作符,如 "+","-","*","/",則將棧頂元素與次棧頂元素按操作符進行運算,並將運算結果入棧(棧頂元素與次棧頂元素要彈出棧)
  • 最后,字符串數組遍歷結束,棧內唯一的元素即運算結果

code

class Solution {
public:
    /*
     * @param tokens: The Reverse Polish Notation
     * @return: the value
     */
    int evalRPN(vector<string> tokens) {
        // write your code here
        int size = tokens.size();
        if (size <= 0) {
            return 0;
        }
        stack<int> stack;
        for (int i = 0; i < size; i++) {
            if (tokens[i] != "+" && tokens[i] != "-" && tokens[i] != "*" && tokens[i] != "/") {
                stack.push(atoi(tokens[i].c_str()));
            }
            else {
                int num1 = stack.top();
                stack.pop();
                int num2 = stack.top();
                stack.pop();
                int num3 = 0;
                if (tokens[i] == "+") {
                    num3 = num2 + num1;
                }
                else if (tokens[i] == "-") {
                    num3 = num2 - num1;
                }
                else if (tokens[i] == "*") {
                    num3 = num2 * num1;
                }
                else if (tokens[i] == "/") {
                    num3 = num2 / num1;
                }
                stack.push(num3);
            }
        }
        return stack.top();
    }
};


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM