LeetCode 224 基本計算器 每日一題

2021-10-21 17:17:56 字數 1574 閱讀 1913

224. 基本計算器

實現乙個基本的計算器來計算乙個簡單的字串表示式s的值。

先附上乙個大佬的做法,兩個棧乙個記錄數字,乙個記錄左括號前面的符號f,這樣當遇到右括號的時候直接將棧頂的值加上f*括號內的值,很簡便的做法

class solution 

ans+=sign*num;

}else if(str[i]=='(')

else ans=st_num.pop()+ans*st_signs.pop();//右括號更新結果

}return ans;

}}

示例 1:

輸入:s = "1 + 1"

輸出:2

示例 2:

輸入:s = " 2-1 + 2 "

輸出:3

示例 3:

輸入:s = "(1+(4+5+2)-3)+(6+8)"

輸出:23

這道題wa了很多次,還有很多點沒有想到,導致**改的很亂。

主要的幾個測試點有

-(2+1)

-(-2+1)

(1-(6-7)+2)

12+15

我基本上就是對幾個方法特判或者特殊處理下。

主要思路先把空格去了,然後用兩個棧來維護算式情況,當遇到右括號兩個棧都應該退棧到左括號並計算括號裡面的

然後模擬就好了

class solution 

for(;i < len; i++)

temp = temp * 10 + s[j] - '0';

}if(sta_int.size()==0)

sta_int.push(temp*fz);

else sta_int.push(temp);

if(j==len) break;

else i = j - 1;

}else

if(s[i]=='-'&&sta_int.size()==0)

if(s[i]==')')

if(fuhao=='+') sta_int.top() = sign * sta_int.top() + num;

if(fuhao=='-') sta_int.top() = sign * sta_int.top() - num;

}sta_char.pop();

}else sta_char.push(s[i]);}}

while(sta_char.size())

if(fuhao=='+') sta_int.top() = sign * sta_int.top() + num;

if(fuhao=='-') sta_int.top() = sign * sta_int.top() - num;

}return sta_int.top()*ffff;

}};

數值。

leetcode 224 基本計算器

題目 基本計算器 實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例1 輸入 1 1 輸出 2 示例2 輸入 2 1 2 輸出 3 示例3 輸入 1 4 5 2 3 6 8 輸出 23 說明 c include include cl...

leetcode 224 基本計算器

實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例 1 輸入 1 1 輸出 2 示例 2 輸入 2 1 2 輸出 3 示例 3 輸入 1 4 5 2 3 6 8 輸出 23 採用雙棧法,設立乙個資料棧和乙個操作符棧,在遍歷字串的過程...

Leetcode 224基本計算器

邏輯先寫第三步再寫第二步,思考時要按照表示式順序先看數字再看右括號正常考慮,時間複雜度o n class solution intcalculate string s else 遇到數字 nums.push n 處理多位數等價寫法 while j s.size isdigit s j j j i c...