224 基本計算器

2021-10-06 02:23:23 字數 3564 閱讀 3239

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

字串表示式可以包含左括號 ( ,右括號 ),加號 + ,減號 -,非負整數和空格 。

示例 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...