LeetCode 题解(136): Fraction to Recurring Decimal
来源:互联网 发布:微博个性域名怎么隐藏 编辑:程序博客网 时间:2024/06/10 05:57
题目:
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.
For example,
- Given numerator = 1, denominator = 2, return "0.5".
- Given numerator = 2, denominator = 1, return "2".
- Given numerator = 2, denominator = 3, return "0.(6)".
用HashMap记录余数作为key与余数出现的位置。C++和Java需要将int转换为long。要注意正负号的问题。
C++版:
class Solution {public: string fractionToDecimal(int numerator, int denominator) { if(numerator == 0) return "0"; string result; if((numerator < 0) ^ (denominator < 0)) result += "-"; long n = numerator; long d = denominator; n = abs(n); d = abs(d); result += to_string(n / d); long r = n % d; if(r == 0) return result; result += "."; unordered_map<long, int> re; while(r) { if(re.find(r) != re.end()) { result = result.substr(0, re[r]) + "(" + result.substr(re[r], result.length()-re[r]) + ")"; break; } re.insert(pair<long, int>(r, result.length())); result += to_string(r * 10 / d); r = r * 10 % d; } return result; }};
Java版:
public class Solution { public String fractionToDecimal(int numerator, int denominator) { if(numerator == 0) return "0"; StringBuilder s = new StringBuilder(); if((numerator < 0) ^ (denominator < 0)) s.append("-"); long n = numerator, d = denominator; n = Math.abs(n); d = Math.abs(d); s.append(Long.toString(n / d)); long r = n % d; if(r == 0) return s.toString(); s.append("."); Map<Integer, Integer> m = new HashMap<>(); while(r != 0) { if(m.containsKey((int)r)) { s.insert(m.get((int)r), "("); s.append(")"); break; } m.put((int)r, s.length()); s.append(Integer.toString((int)(r * 10 / d))); r = r * 10 % d; } return s.toString(); }}
Python版:
class Solution: # @param {integer} numerator # @param {integer} denominator # @return {string} def fractionToDecimal(self, numerator, denominator): if numerator == 0: return "0" result = "" if (numerator < 0) ^ (denominator < 0): result += "-" numerator = abs(numerator) denominator = abs(denominator) result += str(numerator / denominator) if numerator % denominator == 0: return result result += "." d ={} x = numerator % denominator while x: if x in d: result = result[:d[x]] + "(" + result[d[x]:] + ")" break d[x] = len(result) r = (x * 10) / denominator x = (x * 10) % denominator result += str(r) return result
0 0
- LeetCode 题解(136): Fraction to Recurring Decimal
- Fraction to Recurring Decimal|leetcode题解
- LeetCode(166) Fraction to Recurring Decimal
- [leetcode] Fraction to Recurring Decimal
- LeetCode Fraction to Recurring Decimal
- Fraction to Recurring Decimal leetcode
- leetcode:Fraction to Recurring Decimal
- [LeetCode] Fraction to Recurring Decimal
- [leetCode] Fraction to Recurring Decimal
- LeetCode:Fraction to Recurring Decimal
- Leetcode: Fraction to Recurring Decimal
- Leetcode: Fraction to Recurring Decimal
- [LeetCode] Fraction to Recurring Decimal
- [LeetCode]Fraction to Recurring Decimal
- leetcode:Fraction to Recurring Decimal
- [LeetCode]Fraction to Recurring Decimal
- Leetcode: Fraction to Recurring Decimal
- [leetcode]Fraction to Recurring Decimal
- 解析巧用因果法破解GRE填空
- 生产者-消费者模式分析
- leetcode085_221:Maximal Rectangle&Maximal Square
- SAT数学考题范围,助你复习全面不遗漏
- android 事件传播机制
- LeetCode 题解(136): Fraction to Recurring Decimal
- OpenWrt配置绿联的usb转Ethernet网口驱动
- explicit显示声明一个函数
- mac上安装eclipse出现Version 1.6.0_65 of the JVM is not suitable for this produc
- What is Complex Event Processing? (Part 4)
- ZgiBee 手持机
- html css ul li 横向导航
- Struts2 零配置(二)
- udn笔试面试网站