[Swift]LeetCode592. 分数加减运算 | Fraction Addition and Sub
Given a string representing an expression of fraction addition and subtraction,you need to return the calculation result in string format. The final result should be?irreducible fraction. If your final result is an integer,say? Example 1: Input:"-1/2+1/2" Output: "0/1"? Example 2: Input:"-1/2+1/2+1/3" Output: "1/3"? Example 3: Input:"1/3-1/2" Output: "-1/6"? Example 4: Input:"5/3+1/3" Output: "2/1"? Note:
给定一个表示分数加减运算表达式的字符串,你需要返回一个字符串形式的计算结果。?这个结果应该是不可约分的分数,即最简分数。?如果最终结果是一个整数,例如? 示例?1: 输入:"-1/2+1/2" 输出: "0/1" ?示例 2: 输入:"-1/2+1/2+1/3" 输出: "1/3" 示例 3: 输入:"1/3-1/2" 输出: "-1/6" 示例 4: 输入:"5/3+1/3" 输出: "2/1" 说明:
Runtime:?8 ms
Memory Usage:?19.4 MB
1 class Solution { 2 func fractionAddition(_ expression: String) -> String { 3 var n = 0 4 var d = 1 5 var s = Array(expression) 6 if s[0] != "-" { 7 s.insert("+",at: 0) 8 } 9 var p = 0 10 while p < s.count { 11 var p1 = p + 1 12 while s[p1] != "/" { 13 p1 += 1 14 } 15 var p2 = p1 + 1 16 while p2 < s.count && s[p2] != "+" && s[p2] != "-" { 17 p2 += 1 18 } 19 20 let nn = Int(String(s[p+1..<p1]))! 21 let dd = Int(String(s[p1+1..<p2]))! 22 let g = gcd(d,dd) 23 24 n = n * dd / g + (s[p] == "-" ? -1 : 1) * nn * d / g 25 d *= dd / g 26 p = p2 27 } 28 29 let g = gcd(abs(n),d) 30 return String(n / g) + "/" + String(d / g) 31 } 32 33 func gcd(_ a: Int,_ b: Int) -> Int { 34 return (b == 0) ? a: gcd(b,a % b) 35 } 36 } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |