日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【栈】【150. 逆波兰表达式求值】【中等】(需回顾)

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【栈】【150. 逆波兰表达式求值】【中等】(需回顾) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

  • 整數除法只保留整數部分。

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

    示例 1:輸入: ["2", "1", "+", "3", "*"]輸出: 9解釋: ((2 + 1) * 3) = 9示例 2:輸入: ["4", "13", "5", "/", "+"]輸出: 6解釋: (4 + (13 / 5)) = 6示例 3:輸入: ["10", "6", "9", "3", "+", "-11", "*", "/", "*", "17", "+", "5", "+"]輸出: 22解釋: ((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

來源:力扣(LeetCode) 鏈接:https://leetcode-cn.com
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

  • 首先介紹一下前綴、中綴、后綴表達式。

    中綴表達式:1 + (2 + 3) × 4 - 5前綴表達式:- + 1 × + 2 3 4 5后綴表達式:1 2 3 + 4 × + 5 -對計算機來說,計算前綴或后綴表達式的值非常簡單
  • 前綴表達式的計算機求值

  • 從右至左掃描表達式
  • 遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對計算,將結果入棧
  • 重復上述過程直到表達式最左端,最后運算得出的值即為表達式的結果
    • 后綴表達式的計算機求值
  • 從左至右掃描表達式
  • 遇到數字時,將數字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對計算,將結果入棧
  • 重復上述過程直到表達式最右端,最后運算得出的值即為表達式的結果
  • 以下是前綴、中綴、后綴表達式詳解

    轉載自:https://www.cnblogs.com/zzliu/p/10801113.html

    • 個人題解:

    • 利用棧存儲深度值來依次計算

    • 例 [“2”, “1”, “+”, “3”, “*”]

      2 //數字2入棧21 //數字1入棧3 //2+1結果入棧33 //數字3入棧9 //3*3結果入棧
    • 個人代碼:(待優化版)

    public int EvalRPN(string[] tokens) {if(tokens.Length==1)return int.Parse(tokens[0]);int sum = 0;Stack<int> stack = new Stack<int>();for (int i = 0; i < tokens.Length; i++){if(tokens[i]=="+"){int a = stack.Pop();int b = stack.Pop();sum =b+a;stack.Push(sum);}else if(tokens[i]=="-"){int a = stack.Pop();int b = stack.Pop();sum =b-a;stack.Push(sum);}else if(tokens[i]=="*"){int a = stack.Pop();int b = stack.Pop();sum =b*a;stack.Push(sum);}else if(tokens[i]=="/"){int a = stack.Pop();int b = stack.Pop();sum =b/a;stack.Push(sum);}else{stack.Push(int.Parse(tokens[i]));}}return sum;}

    總結

    以上是生活随笔為你收集整理的【栈】【150. 逆波兰表达式求值】【中等】(需回顾)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。