166. Fraction to Recurring Decimal
题目:
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)".
链接: http://leetcode.com/problems/fraction-to-recurring-decimal/
题解:
这道题基本就是Divide Two Integers + 处理循环小数。一刷的时候果断放弃了,因为不想处理恶心的边界条件,不在一开始把int转为long的话后面会很难写。现在又看了一遍大家的答案,发现绝大多数是先把int转为long,我也就放心了。实在不行咱可以用Python写这个。
Java:
Time Complexity - O(n), Space Complexity - O(n)
public class Solution {
public String fractionToDecimal(int numerator, int denominator) {
if (numerator == 0) return "0";
if (denominator == 0) throw new ArithmeticException();
boolean sameSign = (numerator > 0) ^ (denominator < 0);
long dividend = Math.abs((long)numerator);
long divisor = Math.abs((long)denominator);
String intPart = String.valueOf(dividend / divisor);
intPart = sameSign ? intPart : "-" + intPart;
long remainder = dividend % divisor;
if (remainder == 0) return intPart;
Map<Long, Integer> map = new HashMap<>();
StringBuilder decimalPart = new StringBuilder();
while (remainder != 0) {
map.put(remainder, decimalPart.length());
remainder *= 10;
decimalPart.append(remainder / divisor);
remainder = remainder % divisor;
if (map.containsKey(remainder)) {
decimalPart.insert(map.get(remainder), "(");
decimalPart.append(')');
break;
}
}
return intPart + "." + decimalPart.toString();
}
}
二刷:
一样的方法,一样的code,写起来还是很吃力,多多练习吧。
Java:
public class Solution {
public String fractionToDecimal(int numerator, int denominator) {
if (numerator == 0) return "0";
if (denominator == 0) throw new ArithmeticException("Divide by zero");
boolean sameSign = (numerator > 0) ^ (denominator < 0);
long dividend = Math.abs((long)numerator);
long divisor = Math.abs((long)denominator);
StringBuilder sb = new StringBuilder();
if (!sameSign) sb.append("-");
sb.append(dividend / divisor);
dividend %= divisor;
if (dividend == 0) return sb.toString();
sb.append(".");
Map<Long, Integer> map = new HashMap<>();
while (dividend != 0) {
map.put(dividend, sb.length());
dividend *= 10;
sb.append(dividend / divisor);
dividend %= divisor;
if (map.containsKey(dividend)) {
sb.insert(map.get(dividend), "(");
sb.append(")");
return sb.toString();
}
}
return sb.toString();
}
}
Test Cases:
- (1, 3)
- (1, 5)
- (1, 6)
- (1, 90)
- (1, 99)
- (22, 7)
- (-50, 8)
- (0, -5)
- (-1, -2147483648)
- (-2147483648, 1)
Reference:
https://leetcode.com/discuss/18731/accepted-cpp-solution-with-explainations
https://leetcode.com/discuss/18769/there-good-deal-with-extreme-edge-case-without-converting-long
https://leetcode.com/discuss/18989/online-judge-pass-java-version
https://leetcode.com/discuss/20515/my-java-solution
https://leetcode.com/discuss/22652/do-not-use-python-as-cpp-heres-a-short-version-python-code
https://leetcode.com/discuss/23079/my-clean-java-solution
https://leetcode.com/discuss/31521/short-java-solution
https://leetcode.com/discuss/42159/0ms-c-solution-with-detailed-explanations
https://leetcode.com/discuss/50512/accepted-clean-java-solution
http://gqqnbig.me/?p=160
http://blog.csdn.net/hanshileiai/article/details/8861376
http://segmentfault.com/q/1010000003958185
https://leetcode.com/discuss/8886/my-simple-solution
http://blog.csdn.net/ljiabin/article/details/42025037
166. Fraction to Recurring Decimal的更多相关文章
- 【LeetCode】166. Fraction to Recurring Decimal 解题报告(Python)
[LeetCode]166. Fraction to Recurring Decimal 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingz ...
- Leetcode 166. Fraction to Recurring Decimal 弗洛伊德判环
分数转小数,要求输出循环小数 如2 3 输出0.(6) 弗洛伊德判环的原理是在一个圈里,如果一个人的速度是另一个人的两倍,那个人就能追上另一个人.代码中one就是速度1的人,而two就是速度为2的人. ...
- 【LeetCode】166. Fraction to Recurring Decimal
Fraction to Recurring Decimal Given two integers representing the numerator and denominator of a fra ...
- 【刷题-LeetCode】166 Fraction to Recurring Decimal
Fraction to Recurring Decimal Given two integers representing the numerator and denominator of a fra ...
- ✡ leetcode 166. Fraction to Recurring Decimal 分数转换 --------- java
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- Java for LeetCode 166 Fraction to Recurring Decimal
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- 166. Fraction to Recurring Decimal -- 将除法的商表示成字符串(循环节用括号表示)
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- 166. Fraction to Recurring Decimal (Math)
Given two integers representing the numerator and denominator of a fraction, return the fraction in ...
- Leetcode#166 Fraction to Recurring Decimal
原题地址 计算循环小数 先把负数转化成正数,然后计算,最后添加符号 当被除数重复出现的时候,说明开始循环了,所以用一个map保存所有遇到的被除数 需要考虑溢出问题,这也是本题最恶心的地方,看看通过率吧 ...
随机推荐
- hdoj1584 蜘蛛牌 (区间型动态规划)
hdoj1584 分析: f[i][j] 表示 把一串牌 牌 i 到 j 摞为一摞时 所花费最少的步数. d[i][j] 表示把牌 i 挪到牌 j 上时需要走的步数(最初给的状态). 以一串牌 3~8 ...
- war包编译和打包发布
用IDE写一个基本的webApp 要学习java web技术,除了javaSE基本功之外,基础知识还有servlet技术.我们如果只用IDE的话,会把很多问题屏蔽掉,很多细节就想不清楚了.最好的方式, ...
- extjs类的生命周期
只要extjs对应的类文件加载了,那么该类就可以构造对象或者用来继承了.
- 再探Linux动态链接 -- 关于动态库的基础知识
在近一段时间里,由于多次参与相关专业软件Linux运行环境建设,深感有必要将这些知识理一理,供往后参考. 编译时和运行时 纵观程序编译整个过程,细分可分为编译(Compiling,指的是语言到平台 ...
- 【html】【15】特效篇--分页
下载参考: http://aspx.sc.chinaz.com/query.aspx?keyword=%E5%88%86%E9%A1%B5&classID=&page=1 实例: h ...
- [技术翻译] 构建现代化的Objective-C (下)
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3563880.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- Java 与 Python 的对比
最近在学习Python, 现在写一个Python程序和Java程序进行对一下比,以此展示各自不同的特点.这个程序的功能是计算([n, m) )之间的闰年. Python程序如下: def fu ...
- thinkcmf thinkphp隐藏后台地址
做了一个项目,上线的时候 需要隐藏掉domain.com/admin 这个后台地址,但是用的thinkcmf已经预定义好了admin模块. 我们可以用thinkphp自带的模块映射功能实现, 比方说我 ...
- Java Web开发之Servlet、JSP基础
有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发 ...
- 转 修改oracle用户密码永不过期
1.查看用户的proifle是哪个,一般是default: sql>SELECT username,PROFILE FROM dba_users; 2.查看指定概要文件(如default)的 ...