逆波蘭表達式求值

flag

軟件學院大三黨,每天一道算法題,第30天

題目介紹

根據逆波蘭表示法,求表達式的值。
逆波蘭式(Reverse Polish notation,RPN,或逆波蘭記法),也叫後綴表達式(將運算符寫在操作數之後)

有效的運算符包括 +, -, *, / 。每個運算對象可以是整數,也可以是另一個逆波蘭表達式。
1
說明:

整數除法只保留整數部分。
給定逆波蘭表達式總是有效的。換句話說,表達式總會得出有效數值且不存在除數爲 0 的情況。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/evaluate-reverse-polish-notation

思路

仔細觀察這個tokens數組,每個運算符之前一定有至少兩個數字,數組最後一定是運算符
我們採用一個裝整數的棧,遍歷這個數組,當遇到數字的時候,將數字入棧,當遇到運算符的時候,將棧頂的兩個元素出棧,經過運算後的數字再入棧。

關鍵代碼

    public static int evalRPN(String[] tokens){
        Stack<Integer> stack=new Stack();
        int len=tokens.length;
        int result=0;
        for(int i=0;i<len;i++){
            if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){
                int x1=stack.pop();
                int x2=stack.pop();
                int x3;
                if(tokens[i]=="+")
                    x3=x2+x1;
                else if(tokens[i]=="-")
                    x3=x2-x1;
                else if(tokens[i]=="*")
                    x3=x2*x1;
                else
                    x3=x2/x1;
                stack.push(x3);
            }
            else {
                stack.push(Integer.parseInt(tokens[i]));
            }

        }
        return stack.pop();
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章