Given two integers representing the numerator and denominator of a fraction,return the fraction in string format.
If the fractional part is repeating,enclose the repeating part in parentheses.
Example 1:
Input: numerator = 1,denominator = 2 Output: "0.5"
Example 2:
Input: numerator = 2,denominator = 1 Output: "2"
Example 3:
Input: numerator = 2,denominator = 3 Output: "0.(6)"
给定两个整数,分别表示分数的分子 numerator 和分母 denominator,以字符串形式返回小数。
如果小数部分为循环小数,则将循环的部分括在括号内。
示例 1:
输入: numerator = 1,denominator = 2 输出: "0.5"
示例 2:
输入: numerator = 2,denominator = 1 输出: "2"
示例 3:
输入: numerator = 2,denominator = 3 输出: "0.(6)"
8ms
@H_404_40@ 1 class Solution { @H_404_40@ 2 func fractionToDecimal(_ numerator: Int,_ denominator: Int) -> String { @H_404_40@ 3 let s1 = numerator > 0 ? 1 : -1 @H_404_40@ 4 let s2 = denominator > 0 ? 1 : -1 @H_404_40@ 5 let numerator = abs(numerator) @H_404_40@ 6 let denominator = abs(denominator) @H_404_40@ 7 let num = numerator / denominator @H_404_40@ 8 var remain = numerator % denominator @H_404_40@ 9 var remains = [Int : Int]() @H_404_40@10 var res = "" @H_404_40@11 if s1*s2 < 0 && (num > 0 || remain > 0) { @H_404_40@12 res += "-" @H_404_40@13 } @H_404_40@14 res += "\(num)" @H_404_40@15 if remain > 0 { @H_404_40@16 res += "." @H_404_40@17 } @H_404_40@18 var frac = "" @H_404_40@19 var pos = 0 @H_404_40@20 while remain > 0 { @H_404_40@21 if let pos = remains[remain] { @H_404_40@22 frac.insert("(",at: frac.index(frac.startIndex,offsetBy: pos)) @H_404_40@23 frac += ")" @H_404_40@24 return res+frac @H_404_40@25 } @H_404_40@26 remains[remain] = pos @H_404_40@27 frac += String(remain*10 / denominator) @H_404_40@28 remain = remain*10 % denominator @H_404_40@29 pos += 1 @H_404_40@30 } @H_404_40@31 return res+frac @H_404_40@32 } @H_404_40@33 }
12ms
@H_404_40@ 1 class Solution { @H_404_40@ 2 func fractionToDecimal(_ numerator: Int,_ denominator: Int) -> String { @H_404_40@ 3 @H_404_40@ 4 if denominator == 0 { return "NaN" } @H_404_40@ 5 @H_404_40@ 6 //Big bad voodoo magic. @H_404_40@ 7 var numerator = numerator @H_404_40@ 8 var denominator = denominator @H_404_40@ 9 @H_404_40@10 //Note,for bools "!=" behaves the same as "^" which is not allowed. @H_404_40@11 var negative = (numerator < 0) != (denominator < 0) @H_404_40@12 @H_404_40@13 numerator = abs(numerator) @H_404_40@14 denominator = abs(denominator) @H_404_40@15 @H_404_40@16 var result = String(numerator / denominator) @H_404_40@17 var remainder = (numerator % denominator) * 10 @H_404_40@18 @H_404_40@19 if remainder == 0 { @H_404_40@20 if negative == true && numerator != 0 { @H_404_40@21 return String("-") + result @H_404_40@22 } else { @H_404_40@23 return result @H_404_40@24 } @H_404_40@25 } @H_404_40@26 @H_404_40@27 result += "." @H_404_40@28 @H_404_40@29 //See if we find repeating digits... @H_404_40@30 //At the point where our long division keeps @H_404_40@31 //dividing into the same NO,we loop 4evz @H_404_40@32 var repeatMap = [Int:Int]() @H_404_40@33 @H_404_40@34 while remainder != 0 { @H_404_40@35 @H_404_40@36 //We got a repeater? Or nah? @H_404_40@37 if let repeatIndex = repeatMap[remainder] { @H_404_40@38 result.insert("(",at: result.index(result.startIndex,offsetBy: repeatIndex)) @H_404_40@39 result += ")" @H_404_40@40 break @H_404_40@41 } @H_404_40@42 @H_404_40@43 result += String(remainder / denominator) @H_404_40@44 @H_404_40@45 //Set our repeater.. @H_404_40@46 repeatMap[remainder] = result.count - 1 @H_404_40@47 @H_404_40@48 //Perform one more step of long division @H_404_40@49 remainder = (remainder % denominator) * 10 @H_404_40@50 } @H_404_40@51 @H_404_40@52 if negative == true { @H_404_40@53 return String("-") + result @H_404_40@54 } @H_404_40@55 return result @H_404_40@56 } @H_404_40@57 }
12ms
@H_404_40@ 1 class Solution { @H_404_40@ 2 func fractionToDecimal(_ numerator: Int,_ denominator: Int) -> String { @H_404_40@ 3 @H_404_40@ 4 if numerator == 0 { @H_404_40@ 5 return "0" @H_404_40@ 6 } @H_404_40@ 7 @H_404_40@ 8 var res = "" @H_404_40@ 9 @H_404_40@10 if ((numerator < 0) && (denominator >= 0)) || ((numerator >= 0) && (denominator < 0)) { @H_404_40@11 res += "-" @H_404_40@12 } @H_404_40@13 @H_404_40@14 let absNum = abs(numerator) @H_404_40@15 let absDen = abs(denominator) @H_404_40@16 @H_404_40@17 res += String(absNum/absDen) @H_404_40@18 @H_404_40@19 var remander = absNum % absDen @H_404_40@20 @H_404_40@21 if remander == 0 { @H_404_40@22 return res @H_404_40@23 } @H_404_40@24 @H_404_40@25 res += "." @H_404_40@26 @H_404_40@27 var remanders = [Int : Int]() @H_404_40@28 @H_404_40@29 var pos = res.count @H_404_40@30 @H_404_40@31 var add = 0 @H_404_40@32 var hasRecycyle = false @H_404_40@33 @H_404_40@34 while remander != 0 && !hasRecycyle { @H_404_40@35 if remanders.keys.contains(remander) { @H_404_40@36 add = remanders[remander]! @H_404_40@37 hasRecycyle = true @H_404_40@38 continue @H_404_40@39 } @H_404_40@40 @H_404_40@41 remanders[remander] = pos @H_404_40@42 pos += 1 @H_404_40@43 res += String(10 * remander / absDen) @H_404_40@44 remander = (10 * remander) % absDen @H_404_40@45 } @H_404_40@46 @H_404_40@47 if hasRecycyle { @H_404_40@48 res.insert("(",at: res.index(res.startIndex,offsetBy: add)) @H_404_40@49 res += ")" @H_404_40@50 } @H_404_40@51 @H_404_40@52 @H_404_40@53 return res @H_404_40@54 } @H_404_40@55 }
16ms
@H_404_40@ 1 class Solution { @H_404_40@ 2 func fractionToDecimal(_ numerator: Int,_ denominator: Int) -> String { @H_404_40@ 3 var s1:Int = numerator >= 0 ? 1 : -1 @H_404_40@ 4 var s2:Int = denominator >= 0 ? 1 : -1 @H_404_40@ 5 var num:Int = abs(numerator ) @H_404_40@ 6 var den:Int = abs(denominator ) @H_404_40@ 7 var out:Int = num / den @H_404_40@ 8 var rem:Int = num % den @H_404_40@ 9 var m:[Int: Int] = [Int: Int]() @H_404_40@10 var res:String = String(out) @H_404_40@11 if s1 * s2 == -1 && (out > 0 || rem > 0) @H_404_40@12 { @H_404_40@13 res = "-" + res @H_404_40@14 } @H_404_40@15 if rem == 0 {return res} @H_404_40@16 res += "." @H_404_40@17 var s:String = "" @H_404_40@18 var pos:Int = 0 @H_404_40@19 while(rem != 0) @H_404_40@20 { @H_404_40@21 if m[rem] != nil @H_404_40@22 { @H_404_40@23 var index = s.index(s.startIndex,offsetBy: m[rem]!) @H_404_40@24 s.insert("(",at:index ) @H_404_40@25 s += ")" @H_404_40@26 return res + s @H_404_40@27 } @H_404_40@28 m[rem] = pos @H_404_40@29 s += String((rem * 10) / den) @H_404_40@30 rem = (rem * 10) % den @H_404_40@31 pos += 1 @H_404_40@32 } @H_404_40@33 return res + s @H_404_40@34 } @H_404_40@35 }
20ms
@H_404_40@ 1 class Solution { @H_404_40@ 2 func fractionToDecimal(_ numerator: Int,_ denominator: Int) -> String { @H_404_40@ 3 @H_404_40@ 4 if numerator % denominator == 0 { @H_404_40@ 5 return String(numerator/denominator) @H_404_40@ 6 } @H_404_40@ 7 @H_404_40@ 8 let n = abs(numerator); @H_404_40@ 9 let d = abs(denominator); @H_404_40@10 @H_404_40@11 var sign = "" @H_404_40@12 @H_404_40@13 if numerator > 0 && denominator < 0 || numerator < 0 && denominator > 0{ @H_404_40@14 sign = "-" @H_404_40@15 } @H_404_40@16 @H_404_40@17 var i = n @H_404_40@18 while i > d { @H_404_40@19 i = i/d @H_404_40@20 } @H_404_40@21 @H_404_40@22 var dic = Dictionary<Int,Int>() @H_404_40@23 @H_404_40@24 var res = n % d; @H_404_40@25 var s = String() @H_404_40@26 @H_404_40@27 var count = 0 @H_404_40@28 @H_404_40@29 repeat { @H_404_40@30 dic[res] = count @H_404_40@31 res = res * 10; @H_404_40@32 s.append(String(abs(res/d))) @H_404_40@33 res = res % d @H_404_40@34 count = count + 1 @H_404_40@35 } while (res != 0 && dic[res] == nil) @H_404_40@36 @H_404_40@37 if res == 0 { @H_404_40@38 return sign + String(n/d) + "." + s; @H_404_40@39 } @H_404_40@40 let idx = s.index(s.startIndex,offsetBy: dic[res]!) @H_404_40@41 return sign + String(n/d) + "." + s.substring(to: idx) + "(" + s.substring(from: idx) + ")" @H_404_40@42 } @H_404_40@43 }
20ms
@H_404_40@ 1 class Solution { @H_404_40@ 2 func fractionToDecimal(_ numerator: Int,_ denominator: Int) -> String { @H_404_40@ 3 let r = numerator % denominator @H_404_40@ 4 let k = numerator / denominator @H_404_40@ 5 if r == 0 { @H_404_40@ 6 return "\(k)" @H_404_40@ 7 } @H_404_40@ 8 @H_404_40@ 9 let tail = helper(abs(r),abs(denominator)) @H_404_40@10 var ret = "\(abs(k)).\(tail)" @H_404_40@11 if numerator * denominator < 0 { @H_404_40@12 ret = "-" + ret @H_404_40@13 } @H_404_40@14 return ret @H_404_40@15 } @H_404_40@16 @H_404_40@17 @H_404_40@18 func helper(_ n: Int,_ m: Int) -> String { @H_404_40@19 var ret = "" @H_404_40@20 var map = [Int: Int]() @H_404_40@21 var x = n @H_404_40@22 while x != 0 { @H_404_40@23 if let i = map[x] { @H_404_40@24 ret = ret.prefix(i) + "(" + ret.suffix(ret.count - i) + ")" @H_404_40@25 return ret @H_404_40@26 } @H_404_40@27 let y = x * 10 @H_404_40@28 let k = y / m @H_404_40@29 map[x] = ret.count @H_404_40@30 ret += "\(k)" @H_404_40@31 x = y % m @H_404_40@32 } @H_404_40@33 return ret @H_404_40@34 } @H_404_40@35 }
36ms
@H_404_40@ 1 class Solution { @H_404_40@ 2 func fractionToDecimal(_ numerator: Int,_ denominator: Int) -> String { @H_404_40@ 3 if denominator == 0 { @H_404_40@ 4 return "" @H_404_40@ 5 } @H_404_40@ 6 @H_404_40@ 7 if numerator == 0 { @H_404_40@ 8 return "0" @H_404_40@ 9 } @H_404_40@10 @H_404_40@11 //取绝对值 @H_404_40@12 var num1 = numerator > 0 ? numerator : -numerator @H_404_40@13 let num2 = denominator > 0 ? denominator : -denominator @H_404_40@14 //取方向 @H_404_40@15 var result = (numerator > 0 && denominator < 0) || (numerator < 0 && denominator > 0) ? "-" : "" @H_404_40@16 @H_404_40@17 //整数部分 @H_404_40@18 result += String(num1/num2) @H_404_40@19 num1 = num1 % num2 @H_404_40@20 if num1 == 0 { @H_404_40@21 return result @H_404_40@22 }else { @H_404_40@23 result += "." @H_404_40@24 } @H_404_40@25 @H_404_40@26 //小数部分 @H_404_40@27 var dic = [Int:Int]() @H_404_40@28 @H_404_40@29 while num1 != 0 { @H_404_40@30 if dic.keys.contains(num1) { @H_404_40@31 let index = result.index(result.startIndex,offsetBy: dic[num1]!) @H_404_40@32 result.insert("(",at: index) @H_404_40@33 result += ")" @H_404_40@34 break @H_404_40@35 } @H_404_40@36 dic[num1] = result.count @H_404_40@37 num1 *= 10 @H_404_40@38 result += String(num1/num2) @H_404_40@39 num1 %= num2 @H_404_40@40 } @H_404_40@41 return result @H_404_40@42 } @H_404_40@43 }
56ms
@H_404_40@ 1 class Solution { @H_404_40@ 2 func fractionToDecimal(_ numerator: Int,_ denominator: Int) -> String { @H_404_40@ 3 if numerator == 0 { return "0" } @H_404_40@ 4 let sign = (numerator > 0 ? 1 : -1) ^ (denominator > 0 ? 1 : -1) == 0 ? "" : "-" @H_404_40@ 5 var result = sign @H_404_40@ 6 var a = abs(numerator) @H_404_40@ 7 let b = abs(denominator) @H_404_40@ 8 result += "\(a/b)" @H_404_40@ 9 a = a % b @H_404_40@10 if a != 0 { @H_404_40@11 result += "." @H_404_40@12 } else { @H_404_40@13 return result @H_404_40@14 } @H_404_40@15 var decimal = "" @H_404_40@16 var array = [a] @H_404_40@17 while true { @H_404_40@18 a = a * 10 @H_404_40@19 decimal += "\(a/b)" @H_404_40@20 a = a % b @H_404_40@21 if a == 0 { @H_404_40@22 result += decimal @H_404_40@23 return result @H_404_40@24 } @H_404_40@25 if let index = array.index(of: a) { @H_404_40@26 var temp = [Character](decimal) @H_404_40@27 temp.insert("(",at: index) @H_404_40@28 temp.append(")") @H_404_40@29 result += String(temp) @H_404_40@30 return result @H_404_40@31 } else { @H_404_40@32 array.append(a) @H_404_40@33 } @H_404_40@34 } @H_404_40@35 } @H_404_40@36 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。