FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
LeetCode/src/main/java/L0224_BasicCalculator.java at master · LjyYano/LeetCode · GitHub
LjyYano
/
LeetCode
Public
Notifications
You must be signed in to change notification settings
Fork
125
Star
342
Code
Issues
0
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
LeetCode
/
src
/
main
/
java
/
L0224_BasicCalculator.java
Copy path
More file actions
More file actions
Latest commit
History
History
History
103 lines (93 loc) · 3.46 KB
Breadcrumbs
LeetCode
/
src
/
main
/
java
/
L0224_BasicCalculator.java
Copy path
File metadata and controls
103 lines (93 loc) · 3.46 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import
java
.
util
.
Stack
;
/**
* https://leetcode.cn/problems/basic-calculator/
*
* 给你一个字符串表达式 s ,请你实现一个基本计算器来计算并返回它的值。
* 注意:不允许使用任何将字符串作为数学表达式计算的内置函数,比如 eval() 。
*
* 示例 1:
* 输入:s = "1 + 1"
* 输出:2
*
* 示例 2:
* 输入:s = " 2-1 + 2 "
* 输出:3
*
* 示例 3:
* 输入:s = "(1+(4+5+2)-3)+(6+8)"
* 输出:23
*
* 提示:
* - 1 <= s.length <= 3 * 10^5
* - s 由数字、'+'、'-'、'('、')'、和 ' ' 组成
* - s 表示一个有效的表达式
* - '+' 不能用作一元运算(例如, "+1" 和 "+(2 + 3)" 无效)
* - '-' 可以用作一元运算(即 "-1" 和 "-(2 + 3)" 是有效的)
* - 输入中不存在两个连续的操作符
* - 每个数字和运行的计算将适合于一个有符号的 32 位整数
*/
public
class
L0224_BasicCalculator
{
public
int
calculate
(
String
s
) {
Stack
<
Integer
>
stack
=
new
Stack
<>();
int
result
=
0
;
// 当前结果
int
number
=
0
;
// 当前数字
int
sign
=
1
;
// 当前符号:1表示正,-1表示负
for
(
int
i
=
0
;
i
<
s
.
length
();
i
++) {
char
c
=
s
.
charAt
(
i
);
if
(
Character
.
isDigit
(
c
)) {
// 如果是数字,累加到number
number
=
number
*
10
+ (
c
-
'0'
);
}
else
if
(
c
==
'+'
) {
// 计算前面的结果
result
+=
sign
*
number
;
// 重置number和sign
number
=
0
;
sign
=
1
;
}
else
if
(
c
==
'-'
) {
// 计算前面的结果
result
+=
sign
*
number
;
// 重置number和sign
number
=
0
;
sign
= -
1
;
}
else
if
(
c
==
'('
) {
// 遇到左括号,将当前结果和符号压入栈
stack
.
push
(
result
);
stack
.
push
(
sign
);
// 重置result和sign
result
=
0
;
sign
=
1
;
}
else
if
(
c
==
')'
) {
// 计算括号内的最后一个数字
result
+=
sign
*
number
;
// 重置number
number
=
0
;
// 从栈中取出符号和结果
result
*=
stack
.
pop
();
// 取出符号
result
+=
stack
.
pop
();
// 取出之前的结果
}
}
// 处理最后一个数字
if
(
number
!=
0
) {
result
+=
sign
*
number
;
}
return
result
;
}
public
static
void
main
(
String
[]
args
) {
L0224_BasicCalculator
solution
=
new
L0224_BasicCalculator
();
// 测试用例 1
String
s1
=
"1 + 1"
;
System
.
out
.
println
(
"测试用例 1:"
);
System
.
out
.
println
(
"输入:"
+
s1
);
System
.
out
.
println
(
"输出:"
+
solution
.
calculate
(
s1
));
// 预期输出:2
// 测试用例 2
String
s2
=
" 2-1 + 2 "
;
System
.
out
.
println
(
"
\n
测试用例 2:"
);
System
.
out
.
println
(
"输入:"
+
s2
);
System
.
out
.
println
(
"输出:"
+
solution
.
calculate
(
s2
));
// 预期输出:3
// 测试用例 3
String
s3
=
"(1+(4+5+2)-3)+(6+8)"
;
System
.
out
.
println
(
"
\n
测试用例 3:"
);
System
.
out
.
println
(
"输入:"
+
s3
);
System
.
out
.
println
(
"输出:"
+
solution
.
calculate
(
s3
));
// 预期输出:23
}
}
Back
|
FazBrowse Home
|
New Git URL