166. Fraction to Recurring Decimal

JJ·2021년 1월 28일
0

Algorithms

목록 보기
89/114
class Solution {
    public String fractionToDecimal(int numerator, int denominator) {
        int val = numerator / denominator;
        
        int remain = Math.abs(numerator) % Math.abs(denominator);
        
        String result = "";
        Set<Integer> trailing = new HashSet<Integer>();
        
        int next = -1;
        int cur = -1; 
        int repeat = -1; 
        int den = Math.abs(denominator);
        while (trailing.contains(cur) || next == 0) {
            next = remain * 10 % den;
            cur = remain * 10 / den;
            
            trailing.add(cur);
            result += Integer.toString(cur);
        }
        
        if (next == 0) {
            return Integer.toString(val) + "." + result;
        } else {
            return Integer.toString(val) + "." //아...귀찮아...^^
        }
    }
}
public String fractionToDecimal(int numerator, int denominator) {
    if (numerator == 0) {
        return "0";
    }
    StringBuilder fraction = new StringBuilder();
    // If either one is negative (not both)
    if (numerator < 0 ^ denominator < 0) {
        fraction.append("-");
    }
    // Convert to Long or else abs(-2147483648) overflows
    long dividend = Math.abs(Long.valueOf(numerator));
    long divisor = Math.abs(Long.valueOf(denominator));
    fraction.append(String.valueOf(dividend / divisor));
    long remainder = dividend % divisor;
    if (remainder == 0) {
        return fraction.toString();
    }
    fraction.append(".");
    Map<Long, Integer> map = new HashMap<>();
    while (remainder != 0) {
        if (map.containsKey(remainder)) {
            fraction.insert(map.get(remainder), "(");
            fraction.append(")");
            break;
        }
        map.put(remainder, fraction.length());
        remainder *= 10;
        fraction.append(String.valueOf(remainder / divisor));
        remainder %= divisor;
    }
    return fraction.toString();
}

Runtime: 3 ms, faster than 32.20% of Java online submissions for Fraction to Recurring Decimal.
Memory Usage: 38.5 MB, less than 13.76% of Java online submissions for Fraction to Recurring Decimal.

하다가 귀찮아서,,,,,,,
루션이 데려왔읍니다^^

0개의 댓글