国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

104828720 / 3188人閱讀

摘要:小鹿題目根據(jù)逆波蘭表示法,求表達(dá)式的值。給定逆波蘭表達(dá)式總是有效的。算法思路仔細(xì)觀察上述的逆波蘭表達(dá)式,可以發(fā)現(xiàn)一個(gè)規(guī)律就是每遇到一個(gè)操作符,就將操作符前的兩個(gè)操作數(shù)進(jìn)行運(yùn)算,將結(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ù)逆波蘭表示法,求表達(dá)式的值。

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

說明:

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

給定逆波蘭表達(dá)式總是有效的。換句話說,表達(dá)式總會(huì)得出有效數(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:
▉ 算法思路
仔細(xì)觀察上述的逆波蘭表達(dá)式,可以發(fā)現(xiàn)一個(gè)規(guī)律就是每遇到一個(gè)操作符,就將操作符前的兩個(gè)操作數(shù)進(jìn)行運(yùn)算,將結(jié)果保存到原位置。

1)我們可以將這個(gè)過程用棧來進(jìn)行操作。

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

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

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

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

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

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

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

▉ 代碼實(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 提交您其他語言的代碼。在倉庫上堅(jiān)持和小伙伴們一起打卡,共同完善我們的開源小倉庫!
Github:https://github.com/luxiangqia...

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/103539.html

相關(guān)文章

  • LeetCode 150波蘭達(dá)式求值 Evaluate Reverse Polish Nota

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

    Turbo 評(píng)論0 收藏0
  • 達(dá)式類算法小結(jié)

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

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

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

    Hydrogen 評(píng)論0 收藏0
  • [Leetcode] Evaluate Reverse Polish Notation 計(jì)算波蘭

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

    ephererid 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<