diff --git "a/lcof/\351\235\242\350\257\225\351\242\23014- II. \345\211\252\347\273\263\345\255\220 II/README.md" "b/lcof/\351\235\242\350\257\225\351\242\23014- II. \345\211\252\347\273\263\345\255\220 II/README.md" index 67dabbe6f5408..487dd0eb42c17 100644 --- "a/lcof/\351\235\242\350\257\225\351\242\23014- II. \345\211\252\347\273\263\345\255\220 II/README.md" +++ "b/lcof/\351\235\242\350\257\225\351\242\23014- II. \345\211\252\347\273\263\345\255\220 II/README.md" @@ -232,6 +232,41 @@ public class Solution { } ``` +#### Swift + +```swift +class Solution { + private let mod = 1000000007 + + func cuttingRope(_ n: Int) -> Int { + if n < 4 { + return n - 1 + } + if n % 3 == 0 { + return qpow(3, n / 3) + } + if n % 3 == 1 { + return (4 * qpow(3, n / 3 - 1)) % mod + } + return (2 * qpow(3, n / 3)) % mod + } + + private func qpow(_ a: Int, _ n: Int) -> Int { + var a = a + var n = n + var ans: Int = 1 + while n > 0 { + if (n & 1) == 1 { + ans = (ans * a) % mod + } + a = (a * a) % mod + n >>= 1 + } + return ans + } +} +``` + diff --git "a/lcof/\351\235\242\350\257\225\351\242\23014- II. \345\211\252\347\273\263\345\255\220 II/Solution.swift" "b/lcof/\351\235\242\350\257\225\351\242\23014- II. \345\211\252\347\273\263\345\255\220 II/Solution.swift" new file mode 100644 index 0000000000000..9df2ccbe9eea8 --- /dev/null +++ "b/lcof/\351\235\242\350\257\225\351\242\23014- II. \345\211\252\347\273\263\345\255\220 II/Solution.swift" @@ -0,0 +1,30 @@ +class Solution { + private let mod = 1000000007 + + func cuttingRope(_ n: Int) -> Int { + if n < 4 { + return n - 1 + } + if n % 3 == 0 { + return qpow(3, n / 3) + } + if n % 3 == 1 { + return (4 * qpow(3, n / 3 - 1)) % mod + } + return (2 * qpow(3, n / 3)) % mod + } + + private func qpow(_ a: Int, _ n: Int) -> Int { + var a = a + var n = n + var ans: Int = 1 + while n > 0 { + if (n & 1) == 1 { + ans = (ans * a) % mod + } + a = (a * a) % mod + n >>= 1 + } + return ans + } +}