zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    参考博客
    拆包
    python2和python3关于列表推导的差别
    salt Rosters
    list.sort和内置方法sorted的区别
    关于在元祖中+=
    runners
    DataGridView合并单元格
    Android之TelephonyManager类的方法详解
    Android应用自动更新功能的代码实现
  • 原文地址:https://www.cnblogs.com/panini/p/7052744.html
Copyright © 2011-2022 走看看