在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ Normally, the factorial of a positive integer We instead make a clumsy factorial: using the integers in decreasing order, we swap out the multiply operations for a fixed rotation of operations: multiply (*), divide (/), add (+) and subtract (-) in this order. For example, Additionally, the division that we use is floor division such that
Example 1: Input: 4 Output: 7 Explanation: 7 = 4 * 3 / 2 + 1 Example 2: Input: 10
Output: 12
Explanation: 12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1
Note:
通常,正整数 相反,我们设计了一个笨阶乘 例如, 另外,我们使用的除法是地板除法(floor division),所以 实现上面定义的笨函数:给定一个整数 示例 1: 输入:4 输出:7 解释:7 = 4 * 3 / 2 + 1 示例 2: 输入:10 输出:12 解释:12 = 10 * 9 / 8 + 7 - 6 * 5 / 4 + 3 - 2 * 1 提示:
Runtime: 4 ms
Memory Usage: 18.9 MB
1 class Solution { 2 func clumsy(_ N: Int) -> Int 3 { 4 if N == 1 {return 1} 5 if N == 2 {return 2} 6 if N == 3 {return 3 * 2 / 1} 7 return N * (N - 1) / (N - 2) + clumsyInternal(N - 3) 8 } 9 10 func clumsyInternal(_ N: Int) -> Int { 11 if N == 0 {return 0} 12 if N == 1 {return 1} 13 if N == 2 {return 1} 14 if N == 3 {return 3 - 2 * 1} 15 var ans:Int = N - (N - 1) * (N - 2) / (N - 3) 16 return ans + clumsyInternal(N - 4) 17 } 18 }
4ms 1 class Solution { 2 func clumsy(_ n: Int) -> Int { 3 if n == 1 { 4 return 1 5 } else if n == 2 { 6 return 2 7 } else if n == 3 { 8 return 6 9 } 10 var result = n*(n-1)/(n-2) 11 var n = n-3 12 while n >= 4 { 13 result += n - (n-1)*(n-2)/(n-3) 14 n -= 4 15 } 16 if n > 0 { 17 result += 1 18 } 19 return result 20 } 21 } 4ms 1 class Solution { 2 func clumsy(_ n: Int) -> Int { 3 switch n { 4 case 1: 5 return 1 6 case 2: 7 return 2 8 case 3: 9 return 6 10 default: 11 return n*(n-1)/(n-2) + clumsyInternal(n-3) 12 } 13 } 14 15 func clumsyInternal(_ n : Int ) -> Int { 16 if n >= 4 { 17 return n - (n-1)*(n-2)/(n-3) + clumsyInternal(n-4) 18 } 19 if n == 0 { 20 return 0 21 } 22 return 1 23 } 24 } 112ms 1 class Solution { 2 enum Operation: Int { 3 case mul 4 case div 5 case add 6 case sub 7 8 func next() -> Operation { 9 return Operation(rawValue: (self.rawValue + 1) % 4 )! 10 } 11 } 12 13 struct OperationCluster { 14 var current: Operation { 15 return operations[currentIndex] 16 } 17 18 var currentIndex: Int 19 20 let operations: [Operation] 21 init(operations: [Operation]) { 22 self.operations = operations 23 self.currentIndex = 0 24 } 25 26 mutating func next() { 27 currentIndex = (currentIndex + 1) % operations.count 28 } 29 } 30 31 func clumsy(_ N: Int) -> Int { 32 var a = [Int]() 33 34 for i in 0..<N { 35 a.append(N-i) 36 } 37 38 var multiplied = [Int]() 39 40 var operationCluster = OperationCluster(operations: [.mul, .div, .add, .sub]) 41 var ignoreNextOperand = false 42 43 for (index, number) in a.enumerated() { 44 defer { 45 operationCluster.next() 46 } 47 48 guard ignoreNextOperand == false else { 49 ignoreNextOperand = false 50 continue 51 } 52 53 switch operationCluster.current { 54 case .mul: 55 let result = number * (next(in: a, after: index) ?? 1) 56 multiplied.append(result) 57 ignoreNextOperand = true 58 case .div: 59 multiplied.append(number) 60 case .add: 61 multiplied.append(number) 62 case .sub: 63 multiplied.append(number) 64 } 65 } 66 67 operationCluster = OperationCluster(operations: [.div, .add, .sub]) 68 ignoreNextOperand = false 69 70 var divided = [Int]() 71 72 for (index, number) in multiplied.enumerated() { 73 defer { 74 operationCluster.next() 75 } 76 77 guard ignoreNextOperand == false else { 78 ignoreNextOperand = false 79 continue 80 } 81 82 switch operationCluster.current { 83 case .mul: 84 assertionFailure() 85 break 86 case .div: 87 let result = number / (next(in: multiplied, after: index) ?? 1) 88 divided.append(result) 89 ignoreNextOperand = true 90 case .add: 91 divided.append(number) 92 case .sub: 93 divided.append(number) 94 } 95 } 96 97 operationCluster = OperationCluster(operations: [.add, .sub]) 98 ignoreNextOperand = false 99 100 var signApplied = [Int]() 101 102 signApplied.append(divided.first ?? 0) 103 104 for (index, number) in divided.enumerated() { 105 defer { 106 operationCluster.next() 107 } 108 109 guard ignoreNextOperand == false else { 110 ignoreNextOperand = false 111 continue 112 } 113 114 switch operationCluster.current { 115 case .mul: 116 assertionFailure() 117 break 118 case .div: 119 assertionFailure() 120 break 121 case .add: 122 signApplied.append(next(in: divided, after: index) ?? 0) 123 case .sub: 124 signApplied.append(-(next(in: divided, after: index) ?? 0)) 125 } 126 } 127 128 return signApplied.reduce(0, +) 129 } 130 131 func next(in array: [Int], after index: Int) -> Int? { 132 let maxIndex = array.count - 1 133 if maxIndex <= index { 134 return nil 135 } 136 return array[index + 1] 137 } 138 }
|
请发表评论