Skip to content

Commit 1fa7e17

Browse files
authored
feat: add swift implementation to lcci problem: No.16.26 (doocs#2770)
1 parent 1cfc3df commit 1fa7e17

File tree

3 files changed

+120
-0
lines changed

3 files changed

+120
-0
lines changed

lcci/16.26.Calculator/README.md

+41
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,47 @@ function calculate(s: string): number {
199199
}
200200
```
201201

202+
```swift
203+
class Solution {
204+
func calculate(_ s: String) -> Int {
205+
let n = s.count
206+
var x = 0
207+
var sign: Character = "+"
208+
var stk = [Int]()
209+
let sArray = Array(s)
210+
211+
for i in 0..<n {
212+
let c = sArray[i]
213+
if c.isNumber {
214+
x = x * 10 + Int(String(c))!
215+
}
216+
if i == n - 1 || (!c.isNumber && c != " ") {
217+
switch sign {
218+
case "+":
219+
stk.append(x)
220+
case "-":
221+
stk.append(-x)
222+
case "*":
223+
if let last = stk.popLast() {
224+
stk.append(last * x)
225+
}
226+
case "/":
227+
if let last = stk.popLast() {
228+
stk.append(last / x)
229+
}
230+
default:
231+
break
232+
}
233+
x = 0
234+
sign = c
235+
}
236+
}
237+
238+
return stk.reduce(0, +)
239+
}
240+
}
241+
```
242+
202243
<!-- tabs:end -->
203244

204245
<!-- end -->

lcci/16.26.Calculator/README_EN.md

+41
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,47 @@ function calculate(s: string): number {
209209
}
210210
```
211211

212+
```swift
213+
class Solution {
214+
func calculate(_ s: String) -> Int {
215+
let n = s.count
216+
var x = 0
217+
var sign: Character = "+"
218+
var stk = [Int]()
219+
let sArray = Array(s)
220+
221+
for i in 0..<n {
222+
let c = sArray[i]
223+
if c.isNumber {
224+
x = x * 10 + Int(String(c))!
225+
}
226+
if i == n - 1 || (!c.isNumber && c != " ") {
227+
switch sign {
228+
case "+":
229+
stk.append(x)
230+
case "-":
231+
stk.append(-x)
232+
case "*":
233+
if let last = stk.popLast() {
234+
stk.append(last * x)
235+
}
236+
case "/":
237+
if let last = stk.popLast() {
238+
stk.append(last / x)
239+
}
240+
default:
241+
break
242+
}
243+
x = 0
244+
sign = c
245+
}
246+
}
247+
248+
return stk.reduce(0, +)
249+
}
250+
}
251+
```
252+
212253
<!-- tabs:end -->
213254

214255
<!-- end -->

lcci/16.26.Calculator/Solution.swift

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
class Solution {
2+
func calculate(_ s: String) -> Int {
3+
let n = s.count
4+
var x = 0
5+
var sign: Character = "+"
6+
var stk = [Int]()
7+
let sArray = Array(s)
8+
9+
for i in 0..<n {
10+
let c = sArray[i]
11+
if c.isNumber {
12+
x = x * 10 + Int(String(c))!
13+
}
14+
if i == n - 1 || (!c.isNumber && c != " ") {
15+
switch sign {
16+
case "+":
17+
stk.append(x)
18+
case "-":
19+
stk.append(-x)
20+
case "*":
21+
if let last = stk.popLast() {
22+
stk.append(last * x)
23+
}
24+
case "/":
25+
if let last = stk.popLast() {
26+
stk.append(last / x)
27+
}
28+
default:
29+
break
30+
}
31+
x = 0
32+
sign = c
33+
}
34+
}
35+
36+
return stk.reduce(0, +)
37+
}
38+
}

0 commit comments

Comments
 (0)