Skip to content

Commit fc09c8c

Browse files
authored
feat: add swift implementation to lcof problem: No.14.2 (doocs#2867)
1 parent 7796a59 commit fc09c8c

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

lcof/面试题14- II. 剪绳子 II/README.md

+35
Original file line numberDiff line numberDiff line change
@@ -232,6 +232,41 @@ public class Solution {
232232
}
233233
```
234234

235+
#### Swift
236+
237+
```swift
238+
class Solution {
239+
private let mod = 1000000007
240+
241+
func cuttingRope(_ n: Int) -> Int {
242+
if n < 4 {
243+
return n - 1
244+
}
245+
if n % 3 == 0 {
246+
return qpow(3, n / 3)
247+
}
248+
if n % 3 == 1 {
249+
return (4 * qpow(3, n / 3 - 1)) % mod
250+
}
251+
return (2 * qpow(3, n / 3)) % mod
252+
}
253+
254+
private func qpow(_ a: Int, _ n: Int) -> Int {
255+
var a = a
256+
var n = n
257+
var ans: Int = 1
258+
while n > 0 {
259+
if (n & 1) == 1 {
260+
ans = (ans * a) % mod
261+
}
262+
a = (a * a) % mod
263+
n >>= 1
264+
}
265+
return ans
266+
}
267+
}
268+
```
269+
235270
<!-- tabs:end -->
236271

237272
<!-- solution:end -->
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
private let mod = 1000000007
3+
4+
func cuttingRope(_ n: Int) -> Int {
5+
if n < 4 {
6+
return n - 1
7+
}
8+
if n % 3 == 0 {
9+
return qpow(3, n / 3)
10+
}
11+
if n % 3 == 1 {
12+
return (4 * qpow(3, n / 3 - 1)) % mod
13+
}
14+
return (2 * qpow(3, n / 3)) % mod
15+
}
16+
17+
private func qpow(_ a: Int, _ n: Int) -> Int {
18+
var a = a
19+
var n = n
20+
var ans: Int = 1
21+
while n > 0 {
22+
if (n & 1) == 1 {
23+
ans = (ans * a) % mod
24+
}
25+
a = (a * a) % mod
26+
n >>= 1
27+
}
28+
return ans
29+
}
30+
}

0 commit comments

Comments
 (0)