成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

LeetCode 之 JavaScript 解答第150題 —— 逆波蘭表達式求值

104828720 / 3202人閱讀

摘要:小鹿題目根據(jù)逆波蘭表示法,求表達式的值。給定逆波蘭表達式總是有效的。算法思路仔細觀察上述的逆波蘭表達式,可以發(fā)現(xiàn)一個規(guī)律就是每遇到一個操作符,就將操作符前的兩個操作數(shù)進行運算,將結(jié)果保存到原位置。

Time:2019/4/14
Title: Evaluate Reverse Polish Notation
Difficulty: Medium
Author:小鹿

題目:Evaluate Reverse Polish Notation

Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are +, -, *, /. Each operand may be an integer or another expression.

Note:

Division between two integers should truncate toward zero.

The given RPN expression is always valid. That means the expression would always evaluate to a result and there won"t be any divide by zero operation.

根據(jù)逆波蘭表示法,求表達式的值。

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

說明:

整數(shù)除法只保留整數(shù)部分。

給定逆波蘭表達式總是有效的。換句話說,表達式總會得出有效數(shù)值且不存在除數(shù)為 0 的情況。

Example 1:

Input: ["2", "1", "+", "3", "*"]
Output: 9
Explanation: ((2 + 1) * 3) = 9

Example 2:

Input: ["4", "13", "5", "/", "+"]
Output: 6
Explanation: (4 + (13 / 5)) = 6

Example 3:

Input: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]
Output: 22
Explanation: 
  ((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
Solve:
▉ 算法思路
仔細觀察上述的逆波蘭表達式,可以發(fā)現(xiàn)一個規(guī)律就是每遇到一個操作符,就將操作符前的兩個操作數(shù)進行運算,將結(jié)果保存到原位置。

1)我們可以將這個過程用棧來進行操作。

2)所有的操作數(shù)都執(zhí)行近棧操作,當遇到操作符時,在棧中取出兩個操作數(shù)進行計算,然后再將其壓入棧內(nèi),繼續(xù)遍歷數(shù)組元素,直到遍歷完整個數(shù)組為止。

3)到最后,棧內(nèi)只剩下一個數(shù),那就是最后的結(jié)果。

▉ 注意事項
雖然過程很好理解,代碼寫起來很簡單,但是想把算法寫的全面還是需要考慮到很多方面的。

1)數(shù)組中的是字符串類型,要進行數(shù)據(jù)類型轉(zhuǎn)換 parseInt() 。

2)兩個操作數(shù)進行運算時,第二個出棧的操作數(shù)在前,第一個出棧的操作數(shù)在后(注意除法)。

3)對于浮點型數(shù)據(jù),只取小數(shù)點之前的整數(shù)。

4)關(guān)于負的浮點型(尤其是 0 點幾 ),要取 0 絕對值 0 ,或直接轉(zhuǎn)化為整數(shù)。

▉ 代碼實現(xiàn)
var evalRPN = function(tokens) {
   // 聲明棧
    let stack = [];
    for(let item of tokens){
        switch(item){
            case "+":
                let a1 = stack.pop();
                let b1 = stack.pop();
                stack.push(b1 + a1);
                break;
            case "-":
                let a2 = stack.pop();
                let b2 = stack.pop();
                stack.push(b2 - a2);
                break;
            case "*":
                let a3 = stack.pop();
                let b3 = stack.pop();
                stack.push(b3 * a3);
                break;
            case "/":
                let a4 = stack.pop();
                let b4 = stack.pop();
                stack.push(parseInt(b4 / a4));
                break;
            default: 
                stack.push(parseInt(item));
        }
    }
    return parseInt(stack.pop());
};

歡迎一起加入到 LeetCode 開源 Github 倉庫,可以向 me 提交您其他語言的代碼。在倉庫上堅持和小伙伴們一起打卡,共同完善我們的開源小倉庫!
Github:https://github.com/luxiangqia...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/103539.html

相關(guān)文章

  • LeetCode 150波蘭達式求值 Evaluate Reverse Polish Nota

    摘要:題目根據(jù)逆波蘭表示法,求表達式的值。給定逆波蘭表達式總是有效的。逆波蘭表達式又叫做后綴表達式。解題思路可以看出逆波蘭表達式中的每一個運算符屬于該運算符前的兩個數(shù)字間的運算。如如波蘭表達式則加號前兩個數(shù)字為。 題目: 根據(jù)逆波蘭表示法,求表達式的值。 有效的運算符包括 +, -, *, / 。每個運算對象可以是整數(shù),也可以是另一個逆波蘭表達式。 Evaluate the value of...

    Turbo 評論0 收藏0
  • 達式類算法小結(jié)

    摘要:將表達式轉(zhuǎn)換為逆波蘭式,然后求值轉(zhuǎn)換中綴表達式為逆波蘭式魯棒性檢測,表達式中沒有操作數(shù)計算逆波蘭式值參考 表達式類算法題小結(jié) [TOC] 聲明 文章均為本人技術(shù)筆記,轉(zhuǎn)載請注明出處:[1] https://segmentfault.com/u/yzwall[2] blog.csdn.net/j_dark/ 表達式分類 根據(jù)運算符與相關(guān)操作操作數(shù)的位置不同,將表達式分為前綴,中綴和后綴表...

    Heier 評論0 收藏0
  • 堆棧的應(yīng)用——用JavaScript描述數(shù)據(jù)結(jié)構(gòu)

    摘要:一實現(xiàn)一個棧類基于堆棧的特性,可以用數(shù)組做線性表進行存儲。出棧出棧同樣是利用數(shù)組的方法,在數(shù)組尾部推出數(shù)據(jù)。聚合最后,將所有功能聚合后,如下所示,一個堆棧的數(shù)據(jù)結(jié)構(gòu)就搞定了。堆棧的經(jīng)典算法應(yīng)用,首推就是漢諾塔。 棧(stack)又名堆棧,它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。 一、實現(xiàn)一個棧類Stack 基于堆...

    Hydrogen 評論0 收藏0
  • [Leetcode] Evaluate Reverse Polish Notation 計算波蘭

    摘要:棧法復(fù)雜度時間空間思路逆波蘭表達式的計算十分方便,對于運算符,其運算的兩個數(shù)就是這個運算符前面的兩個數(shù)。注意對于減法,先彈出的是減號后面的數(shù)。 Evaluate Reverse Polish Notation Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operato...

    ephererid 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<