Skip to content

Commit 82a5111

Browse files
authored
feat: add swift implementation to lcof2 problem: No.001 (doocs#2965)
1 parent f87fc4b commit 82a5111

File tree

2 files changed

+55
-0
lines changed

2 files changed

+55
-0
lines changed

lcof2/剑指 Offer II 001. 整数除法/README.md

+30
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,36 @@ public class Solution {
268268
}
269269
```
270270

271+
#### Swift
272+
273+
```swift
274+
class Solution {
275+
func divide(_ a: Int, _ b: Int) -> Int {
276+
if b == 1 {
277+
return a
278+
}
279+
if a == Int32.min && b == -1 {
280+
return Int(Int32.max)
281+
}
282+
let sign = (a > 0 && b > 0) || (a < 0 && b < 0)
283+
var a = a > 0 ? -a : a
284+
let b = b > 0 ? -b : b
285+
var ans = 0
286+
while a <= b {
287+
var x = b
288+
var cnt = 1
289+
while x >= (Int32.min >> 1) && a <= (x << 1) {
290+
x <<= 1
291+
cnt <<= 1
292+
}
293+
ans += cnt
294+
a -= x
295+
}
296+
return sign ? ans : -ans
297+
}
298+
}
299+
```
300+
271301
<!-- tabs:end -->
272302

273303
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
class Solution {
2+
func divide(_ a: Int, _ b: Int) -> Int {
3+
if b == 1 {
4+
return a
5+
}
6+
if a == Int32.min && b == -1 {
7+
return Int(Int32.max)
8+
}
9+
let sign = (a > 0 && b > 0) || (a < 0 && b < 0)
10+
var a = a > 0 ? -a : a
11+
let b = b > 0 ? -b : b
12+
var ans = 0
13+
while a <= b {
14+
var x = b
15+
var cnt = 1
16+
while x >= (Int32.min >> 1) && a <= (x << 1) {
17+
x <<= 1
18+
cnt <<= 1
19+
}
20+
ans += cnt
21+
a -= x
22+
}
23+
return sign ? ans : -ans
24+
}
25+
}

0 commit comments

Comments
 (0)