實現乙個基本的計算器來計算乙個簡單的字串表示式的值。
字串表示式可以包含左括號 ( ,右括號 ),加號 + ,減號 -,非負整數和空格 。
示例 1
:輸入:
"1 + 1"
輸出:2
示例 2
:輸入:
" 2-1 + 2 "
輸出:3
示例 3
:輸入:
"(1+(4+5+2)-3)+(6+8)"
輸出:23
說明:你可以假設所給定的表示式都是有效的。
請不要使用內建的庫函式 eval。
基本計算器:+-*
/ ()
示例:(
123+(43
+5+2
)-3)
+(6+
8)思路:先設定3個變數:operand =
0(運算元);result =
0(結果);sign =
1(符號位);
依次遍歷整個字串
i=0;
char ch =
'(';此時將當前計算的結果(當然這裡還沒計算)儲存至棧中
stack.
push
(result)
; stack.
push
(sign)
; result=0;
sign=1;
i=1;
char ch =
'1';此時 operand = operand*10+
(ch-
'0')
;(operand =0*
10+1=
1); i=2;
char ch =
'2';operand =1*
10+2=
12;i=3;
char ch =
'3';operand =12*
10+3=
123;
i=4;
char ch =
'+';result = result+ sign*operand =
123;
sign =
1(因為ch=
'+')
;operand =0;
i=5;
char ch =
'(';
stack.
push
(result)
; stack.
push
(sign)
; result=0;
sign=1;
此時棧從底至頂依次為:0
1123
1 i=6;
char ch=
'4';operand =0*
10+4=
4;i=7;
char ch =
'3';operand =4*
10+3=
43;i=8;
char ch =
'+';
result = result + sign*operand =0+
43=43;
sign=
1;operand=0;
i=9;
char ch =
'5';operand =5;
i=10;
char ch =
'+';result =43+
5*1=
48;sign=
1;operand=0;
i=11;
char ch =
'2';operand =2;
i=12;
char ch=
')';result=result+sign*operand =48+
2*1=
50;result*=stack.
pop()=
50*1=
50;result+=stack.
pop()=
50+123=
173;
operand=0;
此時棧從底至頂依次為:0
1 i=13;
char ch=
'-';result+=sign*operand =
173+0=
173;
sign=-1
;operand=0;
i=14;
char ch =
'3';operand =3;
i=15;
char ch =
')';result+=sign*operand =
173+-1
*3=170
; result*=stack.
pop()=
170*1=
170;
result+=stack.
pop()=
170+0=
170;
operand=0;
此時棧從底至頂依次為:棧為空
i=16;
char ch =
'+';result =
170+-1
*0=170
;sign=
1;operand=0;
i=17;
char ch =
'(';
stack.
push
(result)
; stack.
push
(sign)
; sign=1;
result=0;
此時棧從底至頂依次為:170
1 i=18;
char ch =
'6';operand =6;
i=19;
char ch =
'+';result = result+ sign*operand =0+
1*6=
6;sign=
1;operand=0;
i=20;
char ch =
'8';operand =8;
i=21;
char ch =
')';result+=sign*operand =6+
8=14;
result*=stack.
pop()=
14;result+=stack.
pop()=
14+170=
184;
operand =0;
i=22;退出迴圈,return result +
(sign*operand)
;(ps:還要加上(sign*operand)
,可自行測試 "1 + 1"
)
class
solution
switch
(ch)
case
'-':
case
'(':
case
')':}}
return result +
(sign*operand);}
}
224 基本計算器
題目描述 實現乙個基本的計算器來計算乙個簡單的字串表示式的值。字串表示式可以包含左括號 右括號 加號 減號 非負整數和空格 示例 1 輸入 1 1 輸出 2 示例 2 輸入 2 1 2 輸出 3 示例 3 輸入 1 4 5 2 3 6 8 輸出 23 說明 你可以假設所給定的表示式都是有效的。請不要...
224 基本計算器
leetcode題目 224.基本計算器 剛開始審題不認真,想用以前本科時期學習時用的棧 逆波蘭表示式。其實注意到了上面的幾個注意點就好寫了。解釋上述三點 定義兩個棧 因為棧是先進後出,因此需要倒序遍歷s。假設當前遍歷到s的pos位置,分為如下幾種情況 遇到數字0 9,將數字 不一定是個位數 獲取,...
224 基本計算器
224.基本計算器 困難 答案整理 加深記憶 便於複習!python eval 函式還沒完全看懂。給你乙個字串表示式 s 請你實現乙個基本計算器來計算並返回它的值。示例 1 輸入 s 1 1 輸出 2 示例 2 輸入 s 2 1 2 輸出 3 示例 3 輸入 s 1 4 5 2 3 6 8 輸出 2...