Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 1fa7e17

Browse files
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‎

Lines changed: 41 additions & 0 deletions
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‎

Lines changed: 41 additions & 0 deletions
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‎

Lines changed: 38 additions & 0 deletions
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)

AltStyle によって変換されたページ (->オリジナル) /