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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【LeetCode - 227】基本计算器 II(栈)

發布時間:2023/12/10 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【LeetCode - 227】基本计算器 II(栈) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

https://leetcode-cn.com/problems/basic-calculator-ii/

給你一個字符串表達式 s ,請你實現一個基本計算器來計算并返回它的值。

整數除法僅保留整數部分。

?

示例 1:

輸入:s = "3+2*2"
輸出:7
示例 2:

輸入:s = " 3/2 "
輸出:1
示例 3:

輸入:s = " 3+5 / 2 "
輸出:5
?

提示:

1 <= s.length <= 3 * 105
s 由整數和算符 ('+', '-', '*', '/') 組成,中間由一些空格隔開
s 表示一個 有效表達式
表達式中的所有整數都是非負整數,且在范圍 [0, 231 - 1] 內
題目數據保證答案是一個 32-bit 整數

?

解題報告:

還是很仁慈的,沒有括號,而且沒有? 5/-3這種情況,即沒有兩個符號連在一起的情況。

所以直接棧就好了。遇到乘除就處理,否則直接入棧,最后對棧內元素做加法。

注意s[i]-'0'這里要加括號,不然輸入"2147483647" ,他就先2147483640+ '7' - '0'了,就int溢出了。

AC代碼:

class Solution { public:int calculate(string s) {stack<int> sk;int sign = 1;for(int i = 0; i<s.length(); i++) {if(s[i] == ' ') continue;else if(s[i] == '+') sign = 1;else if(s[i] == '-') sign = 2;else if(s[i] == '*') sign = 3;else if(s[i] == '/') sign = 4;else {int tmp = 0;while(i < s.length() && s[i]>='0'&&s[i]<='9') {tmp = tmp * 10 + (s[i] - '0');i++;}i--;if(sign == 1) sk.push(tmp);if(sign == 2) sk.push(-tmp);if(sign == 3) {int x = sk.top();sk.pop();sk.push(x*tmp);}if(sign == 4) {int x = sk.top();sk.pop();printf("%d %d",x,tmp);sk.push(x/tmp);}}}int ans = 0;while(sk.size()) {ans += sk.top();sk.pop();}return ans;} };

?

總結

以上是生活随笔為你收集整理的【LeetCode - 227】基本计算器 II(栈)的全部內容,希望文章能夠幫你解決所遇到的問題。

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