Problem
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.
Example 1:
1 |
|
Example 2:
1 |
|
Example 3:
1 |
|
Explanation
-
For example 1 / 6:
1
2
3
4
5
6
7
80.16 6 ) 1.00 0 1 0 <-- Remainder=1, mark 1 as seen at position=0. - 6 40 <-- Remainder=4, mark 4 as seen at position=1. - 36 4 <-- Remainder=4 was seen before at position=1, so the fractional part which is 16 starts repeating at position=1 => 1(6).
-
The key insight here is to notice that once the remainder starts repeating, so does the divided result.
-
We will need a hash table that maps from the remainder to its position of the fractional part. Once you found a repeating remainder, you may enclose the reoccurring fractional part with parentheses by consulting the position from the table.
-
The remainder could be zero while doing the division. That means there is no repeating fractional part and you should stop right away.
-
Just like the question 29. Divide Two Integers, be wary of edge case such as negative fractions and nasty extreme case such as -2147483648 / -1.
Solution
1 |
|
Source: