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/

看别人都是转换为long再计算,不想做,有本事你让所有题都不考虑边界条件啊?谁出的这道题谁傻x

官方解答

https://leetcode.com/articles/fraction-recurring-decimal/

更多讨论

https://discuss.leetcode.com/category/174/fraction-to-recurring-decimal

 

我的错误的答案,跑不过-1 -2147483648

 1 public class Solution {
 2     public String fractionToDecimal(int numerator, int denominator) {
 3         if (denominator == 0) {
 4             return "";
 5         }
 6 
 7         int integer = numerator / denominator;
 8         int remaining = numerator % denominator;
 9         if (remaining == 0) {
10             return Integer.toString(integer);
11         }
12         
13         StringBuilder result = new StringBuilder();
14         if (numerator > 0 && denominator < 0 || numerator < 0 && denominator > 0) {
15             result.append("-");
16             remaining = -remaining;
17         }
18         result.append(Integer.toString(Math.abs(integer)));
19         result.append(".");
20         
21         Map<Integer, Integer> fractionalPositions = new HashMap<Integer, Integer>();
22         List<Integer> fractionals = new ArrayList<Integer>();
23         int curPos = 0;
24         fractionalPositions.put(remaining, curPos);
25         curPos++;
26 
27         while (remaining != 0) {
28             remaining *= 10;
29             fractionals.add(remaining / denominator);
30             remaining %= denominator;
31             if (fractionalPositions.containsKey(remaining)) {
32                 int pos = fractionalPositions.get(remaining);
33                 // build fractional part string
34                 for (int i = 0; i < fractionals.size(); i++) {
35                     if (i == pos) {
36                         result.append("(");
37                     }
38                     result.append(Integer.toString(fractionals.get(i)));
39                 }
40                 result.append(")");
41                 break;
42             } else {
43                 fractionalPositions.put(remaining, curPos);
44             }
45             curPos++;
46         }
47         if (remaining == 0) {
48             for (int i = 0; i < fractionals.size(); i++) {
49                 result.append(Integer.toString(fractionals.get(i)));
50             }            
51         }
52         return result.toString();
53     }
54 }

 

posted @ 2017-06-20 09:28  panini  阅读(252)  评论(0编辑  收藏  举报