File tree 2 files changed +65
-0
lines changed
2 files changed +65
-0
lines changed Original file line number Diff line number Diff line change @@ -232,6 +232,41 @@ public class Solution {
232
232
}
233
233
```
234
234
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
+
235
270
<!-- tabs: end -->
236
271
237
272
<!-- solution: end -->
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments