Skip to content

Commit 45792d4

Browse files
solves fraction to decimal in leetcode
1 parent eea1262 commit 45792d4

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@
145145
| 161 | 🔒 [One Edit Distance](https://leetcode.com/problems/one-edit-distance) | | |
146146
| 162 | [Find Peak Element](https://leetcode.com/problems/find-peak-element) | [![Java](assets/java.png)](src/FindPeakElement.java) | |
147147
| 165 | [Compare Version Numbers](https://leetcode.com/problems/compare-version-numbers) | [![Java](assets/java.png)](src/CompareVersionNumbers.java) | |
148-
| 166 | [Fraction to Recurring Decimal](https://leetcode.com/problems/fraction-to-recurring-decimal) | | |
148+
| 166 | [Fraction to Recurring Decimal](https://leetcode.com/problems/fraction-to-recurring-decimal) | [![Java](assets/java.png)](src/FractionToRecurringDecimal.java) | |
149149
| 167 | [Two Sum II - Input Array is Sorted](https://leetcode.com/problems/two-sum-ii-input-array-is-sorted) | [![Java](assets/java.png)](src/TwoSumIIInputArrayIsSorted.java) [![Python](assets/python.png)](python/two_sum_ii.py) | |
150150
| 168 | [Excel Sheet Column Title](https://leetcode.com/problems/excel-sheet-column-title) | [![Java](assets/java.png)](src/ExcelSheetColumnTitle.java) [![Python](assets/python.png)](python/excel_sheet_column_title.py) | |
151151
| 169 | [Majority Element](https://leetcode.com/problems/majority-element) | [![Java](assets/java.png)](src/MajorityElement.java) [![Python](assets/python.png)](python/majority_element.py) | |

src/FractionToRecurringDecimal.java

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
// https://leetcode.com/problems/fraction-to-recurring-decimal
2+
// T: O(log(n / d)) but not sure, could use some mathematician's help
3+
// S: O(log(n / d))
4+
5+
import java.util.HashMap;
6+
import java.util.Map;
7+
8+
public class FractionToRecurringDecimal {
9+
private static final String ZERO = "0";
10+
11+
public String fractionToDecimal(long numerator, long denominator) {
12+
if (numerator == 0) return ZERO;
13+
14+
StringBuilder result = new StringBuilder();
15+
result.append(isNegative(numerator, denominator) ? "-" : "");
16+
17+
numerator = Math.abs(numerator);
18+
denominator = Math.abs(denominator);
19+
20+
// integral part
21+
result.append(numerator / denominator);
22+
numerator %= denominator;
23+
if (numerator == 0) return result.toString();
24+
25+
// fractional part
26+
result.append(".");
27+
Map<Long, Integer> map = new HashMap<>();
28+
map.put(numerator, result.length());
29+
30+
while (numerator != 0) {
31+
numerator *= 10;
32+
result.append(numerator / denominator);
33+
numerator %= denominator;
34+
if (map.containsKey(numerator)) {
35+
int index = map.get(numerator);
36+
result.insert(index, "(");
37+
result.append(")");
38+
break;
39+
} else map.put(numerator, result.length());
40+
}
41+
42+
return result.toString();
43+
}
44+
45+
private boolean isNegative(long numerator, long denominator) {
46+
return (numerator > 0) ^ (denominator > 0);
47+
}
48+
}

0 commit comments

Comments
 (0)