题目:

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. (1, 3)
  2. (1, 5)
  3. (1, 6)
  4. (1, 90)
  5. (1, 99)
  6. (22, 7)
  7. (-50, 8)
  8. (0, -5)
  9. (-1, -2147483648)
  10. (-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的更多相关文章

  1. 【LeetCode】166. Fraction to Recurring Decimal 解题报告(Python)

    [LeetCode]166. Fraction to Recurring Decimal 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingz ...

  2. Leetcode 166. Fraction to Recurring Decimal 弗洛伊德判环

    分数转小数,要求输出循环小数 如2 3 输出0.(6) 弗洛伊德判环的原理是在一个圈里,如果一个人的速度是另一个人的两倍,那个人就能追上另一个人.代码中one就是速度1的人,而two就是速度为2的人. ...

  3. 【LeetCode】166. Fraction to Recurring Decimal

    Fraction to Recurring Decimal Given two integers representing the numerator and denominator of a fra ...

  4. 【刷题-LeetCode】166 Fraction to Recurring Decimal

    Fraction to Recurring Decimal Given two integers representing the numerator and denominator of a fra ...

  5. ✡ leetcode 166. Fraction to Recurring Decimal 分数转换 --------- java

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  6. Java for LeetCode 166 Fraction to Recurring Decimal

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  7. 166. Fraction to Recurring Decimal -- 将除法的商表示成字符串(循环节用括号表示)

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  8. 166. Fraction to Recurring Decimal (Math)

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  9. Leetcode#166 Fraction to Recurring Decimal

    原题地址 计算循环小数 先把负数转化成正数,然后计算,最后添加符号 当被除数重复出现的时候,说明开始循环了,所以用一个map保存所有遇到的被除数 需要考虑溢出问题,这也是本题最恶心的地方,看看通过率吧 ...

随机推荐

  1. Android更改桌面应用程序launcher的两种方式

    http://blog.csdn.net/mdx20072419/article/details/9632779/ launcher,也就是android的桌面应用程序.下图是我正在使用的魅族手机的l ...

  2. 12天学好C语言——记录我的C语言学习之路(Day 6)

    12天学好C语言--记录我的C语言学习之路 Day 6: 今天,我们要开始学习数组了. //①数组部分,数组的大小不能够动态定义.如下: //int n;   scanf("%d,& ...

  3. java之多态的使用

    首先,什么是多态?我们应该从什么角度来理解多态?其实,我们不妨把多态理解成一种事物的多种存在形态,比如,猫和狗都可以变成动物,而动物又可以变成猫和狗. 为了充分理解多态,我们可以从以下这几个方面来理解 ...

  4. mysql 的rmp安装

    新文档/* GitHub stylesheet for MarkdownPad (http://markdownpad.com) *//* Author: Nicolas Hery - http:// ...

  5. 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(三)

    jar包完成后,剩下就是要构建ANE包来供实际程序调用. 首先要建两个Flex库项目, default那个是官方建议加上的,仅用于不在真实环境下编译调试的时候有个默认接口不至于调用不成功报错,项目结构 ...

  6. Qt-获取网络接口信息的综合示例

    在前面的文章中介绍了与 获 取 本 机 网 络 信 息 相 关 的 类 常 用 的 有 4 个 , 分 别 是 : QHostAddress, QHostInfo, QNetworkInterface ...

  7. cache在spring中使用

    一:参考文章 (1)http://haohaoxuexi.iteye.com/blog/2123030  Spring使用Cache,这篇文章讲的比较详细. 注:本文是对参考文章和实际使用中经验的总结 ...

  8. jquery 在页面中按回车 响应 事件

    为了用户方便我们往往会在用户回车之后做一些事,比如登陆的时候,填完表单过后,我们习惯性的会直接按回车,当然要处理这个,jquery是很简单的,我们来看看怎么做吧. $(document).ready( ...

  9. Visual Studio 2010下载 + 附破解方法

    Visual Studio 2010下载 + 附破解方法 1.Microsoft Visual Studio 2010下载 旗舰版(Ultimate) http://download.microsof ...

  10. 解决使用 Composer 的时候提示输入 Token

    Could not fetch https://api.github.com/repos/RobinHerbots/jquery.inputmask/contents/bower.json?ref=0 ...